2013-08-10 5 views
-1

기본 읽기 비어있을 때 열이 이동하는이 알 괜찮 :쓰기 : 행의 항목 (파이썬)

여기
with open('kres.csv', newline='') as f: 
    reader = csv.reader(f, quoting=csv.QUOTE_ALL) 
    for row in reader: 
     print(row) 
     kres.append(row) 

내가 CSV로 쓰고 있지만 열 때 필드 (항목)를 이동하는의 행은 비어 있습니다. 프로그램이 파일의 열 개수를 모르고 하나씩 작성하기 때문에 (가정합니다).
그러나 빈 필드를 건너 뛰지 않으려면 일부 기본 문자 또는 없음을 쓰길 원합니다. 나는 필드가 비어 있는지 확인하는 방법을 모른다. 윈도우 7에

with open('kres2.csv', 'w', newline='') as f: # Just use 'w' mode in 3.x 
    writer = csv.writer(f) 
    writer.writerows(kres) 

파이썬 3.3.2

편집 : 목록에있는 모든 필드를 착하려고하지만, 작동하지

with open('article_all_krestianin_ru.csv', newline='') as f: 
    reader = csv.reader(f, quoting=csv.QUOTE_ALL) 
    for row in reader: 
     for i in row: 
      if i == '': 
       i = '-' 
      print(row) 
     krestianin.append(row) 

편집 2 : [ 'А теперь - про язык ; Окт 21 ','2008; Окт 21 ','2008 년 теперь - про язык спрашивала ','как; http://www.krestianin.ru/articles/5541.php ']

콘솔의 4 개 항목 (구분 기호;)입니다. 해당 항목 중 하나라도 누락되거나 1 개 또는 2 개가 누락 될 수 있으므로 4 개 중 2 개가 누락 된 경우 해당 위치에 "-"를 넣으려고합니다.

+0

실제 CSV 파일을 변경해야한다고 생각합니다. – ton1c

+0

@ ton1c 물론 선택 사항입니다. , 코드에서이 작업을 수행 할 방법이 있다고 생각하십니까? –

+0

행에 얼마나 많은 요소가 있어야하는지, 어디에 있어야하는지 알면'kres' 목록에 요소를 추가 할 수 있습니다. CSV 파일을 읽을 수 있고 필요한 경우 "빈 요소"를'-' (무언가, 무언가, ** -, ** 무언가)로 추가하십시오 – ton1c

답변

2

CSV 모듈이 Python에서 작동하는 방식을 이해하지 못하는 것 같습니다. 출력 될 것

import csv 

kres = [] 

with open('kres.csv') as f: 
    reader = csv.reader(f, quoting=csv.QUOTE_ALL) 
    for row in reader: 
     print(row) 
     kres.append(row) 

:이 코드를 실행하면 다음

1,2,3,4,5,6,7 
a,b,c,d,e,f,g 

: 이제 kres.csv 파일이이 데이터를 가지고 있다고 가정 해 봅시다

['1', '2', '3', '4', '5', '6', '7'] 
['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

을 그래서 당신은 목록을 점점된다 , 각 목록은 읽은 행입니다.

당신은 당신의 kres.csv 파일에이 데이터가있는 경우 :

1,2,3,5,6,7 
a,b,c,d,e,f,g 

을하고이 같은 수의 출력이 필요합니다

['1', '2', '3', '-', '5', '6', '7'] 
['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

이 그럼 당신은 수표를 작성해야하는 먼저 행에 몇 개의 요소가 있는지 확인합니다 (이 경우 7보다 작 으면 일부 요소를 놓치고있는 것입니다.) 그 다음에 누락 된 요소를 찾아야합니다.이 경우 4 (이 예에서) 정확히 3 및 befor 뒤에 있어야합니다. e 5.

Regex를 사용하여이 검사를 작성할 수 있으며 (물론 CSV 파일에있는 데이터에 따라 다름) 각 요소를 확인해야합니다 (오른쪽 열에 elemtn이 있음, 목록 있음).

프로그래밍 방식으로 할 수는 있지만 CSV 모듈을 사용하면 안됩니다.


CSV 파일의 빈 요소는 다음과 같이 제시 :

1,2,3,,5,6,7 
a,b,c,d,e,f,g 

그래서 코드의 출력이 될 것입니다 :

['1', '2', '3', '', '5', '6', '7'] 
['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

,,'',는 빈 요소

입니다
+0

좋아, 당신이 설명, 나는 항목 수를 확인 len (목록)을 사용할 수 있습니다. 그러나 누락 된 부분을 확인하는 방법은 무엇입니까? 항목의 데이터가 많이 다르기 때문에 regexp –

+0

'print len ​​(row)'를 사용할 방법이 없으면 목록의 길이를 알 수 없습니다. 행을 확인할 수 없으면이 방법이 없습니다. 수동으로 만. 요소가 누락 된 행을 등록하고 입력 및 출력 CSV 파일을 비교하여 수동으로 편집하십시오. – ton1c

+0

소리가 맞으므로 누락 된 항목이있는 행을 직접보고 일부 기준에 누락 된 항목을 판별해야 할 수 있습니다 (정렬에 따라 다름) CSV 데이터에서 기대할 수있는 패턴). –

-1

코드를 변경할 필요가 없습니다. 모두 잘 작동합니다. 첫 번째로, 나는 장애물의 유형을 감지하는 것이 잘못되었습니다. 필드가 누락 된 것으로 생각했지만 Excel 2010의 기본 열기 설정이었습니다. 짧은 대답 : csv 정확하게 거래 ;; 파일에서 열은 이동하지 않습니다.

그러나 열은 Excel에서 기본 열림으로 이동되었습니다. 일부는 변경되었습니다. Excel 2010에서 올바르게 식별되지 않아 데이터가 첫 번째 열에 병합되었습니다. 모양 : 'Some text;18.08.2009; - 첫 번째; 감지되지 않습니다.

제대로 가져 오는 방법 :

이동 데이터 탭에 2. 가져 오기 마법사에서 파일 3에서 가져 오기를 구분하여 데이터를 선택하는 선택 4. 다음, 선택; delimeter 5. 여기에 답이 나와 있습니다 : 기본적으로 문자열은 "로 변경됩니다."로 변경해야합니다.