2010-11-22 4 views
9

파이썬을 사용하여 CSV 파일을 추가하면 다른 모든 행에서 데이터를 얻습니다. 어떻게 수정합니까?CSV 파일에 추가하는 방법은 무엇입니까?

import csv 

LL = [(1,2),(3,4)] 

Fn = ("C:\Test.csv") 
w = csv.writer(open(Fn,'a'), dialect='excel') 
w.writerows(LL) 

C:\test.csv은이 같은 모습을 열었을 때 :

1,2 

3,4 

1,2 

3,4 
+0

무엇이 문제입니까/문제입니까? 나에게 명확하지 않다 .. – poke

+0

"다른 행마다 데이터가 나옵니다. 어떻게 수정합니까?" 이것은 정확히 무엇을 의미합니까? 샘플 출력 대 원하는 샘플 출력을 붙여 넣을 수 있습니까? – Chris

+2

@poke, @Chris : 예상되는 각 데이터 행 다음에 OP에 예기치 않은 빈 행이 삽입됩니다. –

답변

34

추가 문제 무관하다; 첫 번째 두 행 (원본 파일의 행)도 이중으로 공백을 표시합니다.

실제 문제는 파일을 모드로 열었습니다.

CSV는 바이너리 형식이거나 믿을 수 없습니다. csv 모듈은 오해의 소지가있는 "lineterminator"("rowseparator"여야 함)를 예상대로 작성하지만 Windows C 런타임은 \n\r\n으로 바꿔서 행 사이에 \r\r\n을 갖습니다. csv 파일을 Excel과 혼동하면

Windows에서 작동하든 아니든 상관없이 항상 CSV 파일을 'rb', 'wb', 'ab'로 바이너리 모드로 열면 예상 한 * x 상자에서도 rowseparator (CR LF)를 사용하면 코드가 이식 가능하고 데이터에 포함 된 모든 줄 바꿈이 쓰여질 때 다른 것으로 변경되거나 드라마를 유발할 수 있습니다 (입력시 제공됨) 제대로).

오스 문제 :

(1) 루트 디렉토리 (C:\)에 데이터를 저장하지 마십시오. Windows는 1980 년대 MS-DOS에서 계층 적 파일 시스템을 계승했습니다. 그걸 써.

(2) 코드에 배선 된 파일 이름을 삽입해야하는 경우 원시 문자열 r"c:\test.csv"을 사용하십시오. "c:\test.csv"이 있으면 '\ t'는 탭 문자로 해석됩니다. \r과 비슷한 문제들 \n

(3) 파이썬 매뉴얼의 예제는 견고한 코드보다 간결하게 정렬되어 있습니다.

이 작업을 수행하지 마십시오

w = csv.writer(open('foo.csv', 'wb')) 

는이 작업을 수행 :

f = open('foo.csv', 'wb') 
w = csv.writer(f) 

을 다음 완료되면, 당신은 사용할 수 f이 당신이 당신의 파일 내용이 있는지 확인하기 위해 f.close()을 할 수 있도록 디스크로 플러시됩니다. 새로운 with 성명서를 읽으십시오.

+0

Darn. 나는 이것을 알아내어 같은 것을 말하는 대답의 중간에 있었다. +1. –

+0

+1; 완전한 대답과 철저한 설명이 필요합니다. – bernie

+0

흥미롭게도'csv'문서의 대부분이 Python 2 문서의 경우 바이너리 모드를 사용하지만 [DictReader] (https://docs.python.org/2/library/csv.html#csv.DictReader) 예제는 [Python 3에 대한 예제] (https://docs.python.org/3/library/csv.html)를 수행하지도 않으며 수행하지도 않습니다. 이것에 대한 좋은 이유가 있습니까? 그렇지 않다면 아마도 문서를 변경하려고 시도하고 싶습니까? –

2

Windows에서 실행되는 동안 이미 생성 된 csv 파일을 추가하는 것과 비슷한 문제가 발생했습니다.

이 경우 "binary"모드로 쓰고 추가하면 python 스크립트를 사용하여 작성되거나 추가 된 각 행에 여분의 행을 추가하지 않아도됩니다. 따라서;

w = csv.writer(open(Fn,'ab'),dialect='excel') 
+0

Windows에서는 Python으로 방어 코딩을 많이해야합니다. – Merlin

관련 문제