Programing

Python에서 Dictwriter로 출력 할 때 CSV 파일에 각 데이터 줄 사이에 빈 줄이있는 이유는 무엇입니까?

lottogame 2020. 9. 9. 20:08
반응형

Python에서 Dictwriter로 출력 할 때 CSV 파일에 각 데이터 줄 사이에 빈 줄이있는 이유는 무엇입니까?


이 질문에 이미 답변이 있습니다.

DictWriter를 사용하여 사전의 데이터를 csv 파일로 출력하고 있습니다. CSV 파일의 각 데이터 줄 사이에 빈 줄이있는 이유는 무엇입니까? 큰 문제는 아니지만 "이중 간격"이 파일의 줄 수를 두 배로 늘리기 때문에 너무 많은 줄이 있기 때문에 데이터 세트가 크고 하나의 csv 파일에 맞지 않습니다.

사전에 쓰는 코드는 다음과 같습니다.

headers=['id', 'year', 'activity', 'lineitem', 'datum']
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)
output.writerow(dict((fn,fn) for fn in headers))
for row in rows:
    output.writerow(row)

기본적으로 csv모듈 의 클래스는 \r\nUnix 스타일 ( \n)이 아닌 Windows 스타일 줄 종결 자 ( )를 사용합니다. 이것이 명백한 이중 줄 바꿈의 원인 일 수 있습니까?

그렇다면 DictWriter생성자 에서 재정의 할 수 있습니다 .

output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers)

에서 http://docs.python.org/library/csv.html#csv.writer :

csvfile이 파일 객체 인 경우 차이가 나는 플랫폼에서 'b'플래그로 열어야합니다.

즉, 파일을 열 때 'w'가 아닌 'wb'를 전달합니다. 파일 쓰기가 끝나면 문을
사용 with하여 파일을 닫을 수도 있습니다 .
아래 테스트 된 예 :

from __future__ import with_statement # not necessary in newer versions
import csv
headers=['id', 'year', 'activity', 'lineitem', 'datum']
with open('file3.csv','wb') as fou: # note: 'wb' instead of 'w'
    output = csv.DictWriter(fou,delimiter=',',fieldnames=headers)
    output.writerow(dict((fn,fn) for fn in headers))
    output.writerows(rows)

이 줄에서 'w'(쓰기) 변경 :

output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)

'wb'(바이너리 쓰기)하려면이 문제를 해결했습니다.

output = csv.DictWriter(open('file3.csv','wb'), delimiter=',', fieldnames=headers)

Python v2.75 : Open ()

위의 원본 게시물에 대한 의견의 솔루션에 대해 @dandrejvv에게 감사드립니다.


방금 귀하의 스 니펫을 테스트했으며 여기에는 이중 간격 줄이 없습니다. 라인의 끝은 \r\n이므로 귀하의 경우 확인하려는 것은 다음과 같습니다.

  1. 편집기가 DOS 파일을 올바르게 읽고 있습니다.
  2. 행 dict의 값에 \ n이 없습니다.

(\ n으로 값을 입력해도 DictWriter는 자동으로 값을 인용합니다.)

참고 URL : https://stackoverflow.com/questions/8746908/why-does-csv-file-contain-a-blank-line-in-between-each-data-line-when-outputting

반응형