문제

에 따르면 문서 csv.writer는 기본적으로 ' r n'을 lineterminator로 사용해야합니다.

import csv

with open("test.csv", "w") as f:
    writer = csv.writer(f)

    rows = [(0,1,2,3,4),
           (-0,-1,-2,-3,-4),
           ("a","b","c","d","e"),
           ("A","B","C","D","E")]           

    print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")
    writer.writerows(rows)
    print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")

이 지문

\r\n
\r\n

예상대로. 그러나 생성 된 CSV 파일은 lineterminator ' r r n'을 사용합니다.

0,1,2,3,4

0,-1,-2,-3,-4

a,b,c,d,e

A,B,C,D,E

이것은 버그입니까 아니면 CSV.Writer를 사용하는 데 문제가 있습니까?

파이썬 버전 :

ActivePython 2.6.2.2 (ActiveState Software Inc.) Python 2.6.2 (R262 : 71600, 4 월 21, 15:05:37) [MSC V.1500 32 비트 (Intel)] on Win32.

Windows Vista에서

도움이 되었습니까?

해결책

Python 2.X에서는 항상 파일을 열어줍니다 이진 문서화 된 모드. csv 쓴다 \r\n 예상대로, 그러나 기본 Windows 텍스트 파일 메커니즘이 절단되어 변경됩니다. \n 에게 \r\n ... 총 효과 : \r\r\n

로부터 csv.writer 선적 서류 비치:

만약에 csvfile 파일 객체이므로 'b' 차이가있는 플랫폼의 플래그.

주요 범인의 이름을 실제로 발언하는 것에 대해 약간의 망상이있는 것 같습니다 :-)

편집 : @jebob 이이 답변에 대한 의견과 @Dave Burton 's를 기반으로 언급 한 바와 같이 대답, Python 2와 3 에서이 경우를 처리하려면 다음을 수행해야합니다.

if sys.version_info >= (3,0,0):
    f = open(filename, 'w', newline='')
else:
    f = open(filename, 'wb')

다른 팁

불행히도 Python 3 용 CSV 모듈과는 약간 다르지만이 코드는 Python 2와 Python 3에서 작동합니다.

if sys.version_info >= (3,0,0):
    f = open(filename, 'w', newline='')
else:
    f = open(filename, 'wb')

Python 2.7 CSV 작가 사용에서 라인 터미네이터를 변경하려면

writer = csv.writer(f, delimiter = '|', lineterminator='\n')

이것은 기본 구분기를 r n에서 변경하는 훨씬 간단한 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top