2010-03-02 5 views
89

이전 CSV 파일에 새 행을 추가하려고합니다. 기본적으로 파이썬 스크립트를 실행할 때마다 업데이트됩니다.이전 csv 파일 python에 새 행을 추가하십시오.

지금은 목록에 이전 csv 행 값을 저장하고 csv 파일을 삭제하고 새 목록 값으로 다시 생성합니다.

이 작업을 수행하는 데 더 좋은 방법이 있는지 알고 싶습니다. 'a' 매개 변수와 함께 파일을 열면

답변

118
fd = open('document.csv','a') 
fd.write(myCsvRow) 
fd.close() 

대신 단순히 기존 내용을 덮어 쓰기 파일의 끝에 추가 할 수 있습니다. 시도해 봐.

+1

나는 시도했다 fp = open (csv_filepathwithname, 'wa') 작가 = csv.작가 (FP) somelist = [3,56,3,6,56] writer.writerow ((somelist)) 그러나 마지막 행은 파일에 추가 얻을. – laspal

8

'w'대신 'a'의 모드로 파일을여시겠습니까?

는 파이썬 문서

7.2 Reading and Writing Files를 참조하십시오. 파일 읽기 및 쓰기

open()은 파일 객체를 반환하며 open (filename, mode)의 두 인수로 가장 일반적으로 사용됩니다.

>>> f = open('workfile', 'w') 
>>> print f <open file 'workfile', mode 'w' at 80a0960> 

첫 번째 인수는 파일 이름을 포함하는 문자열입니다. 두 번째 인수는 파일이 사용되는 방법을 설명하는 몇 개의 문자가 포함 된 다른 문자열입니다. 모드는 파일이 단지 일 때 'r'이 될 수 있으며 'w'만 쓰면 (같은 이름의 기존 파일은 이 지워질 것입니다.) 'a'는 추가 할 파일을 엽니 다. 에 쓰여진 데이터는 자동으로 끝에 추가됩니다. 'r +'는 에 대한 파일을 읽고 쓰는 중입니다. mode 인수는 선택 사항입니다. 'r'은 생략되면 이됩니다.

모드에서 'b'를 추가하면 이진 모드로 열리므로 에는 'rb', 'wb'및 'r + b'와 같은 모드가 있습니다. Windows상의 Python 은 텍스트 파일과 바이너리 파일을 구별합니다. 텍스트 의 행 끝은 데이터 을 읽거나 쓸 때 자동으로 약간 변경됩니다. 파일 데이터 에 대한이 비하인드 장면 수정은 ASCII 텍스트 파일에서는 문제가되지 않지만 JPEG 또는 EXE 파일에서는 과 같은 이진 데이터가 손상됩니다. 을 읽고 그러한 파일을 쓸 때 이진 모드를 사용하는 데 매우주의하십시오. 유닉스에서는 모드를 ' '에 'b'를 추가하지 않아도되므로 모든 바이너리 파일에 플랫폼 독립적으로 사용할 수 있습니다.

+0

당신이 대답을 더 정교하게 만들 수 있습니다, 그럼 그것은 진짜 대답처럼 보일 것입니다 :-) – user702846

+0

@user, 나는 링크를 추가했습니다 - 그게 도움이됩니까? –

59

이 솔루션은 표준 라이브러리의 csv 모듈과 with 모듈을 사용하여 파일을 열지 않는 것이 좋습니다.

중요한 점은 파일을 열 때 추가를 위해 'a'을 사용한다는 것입니다.

import csv 
fields=['first','second','third'] 
with open(r'name', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(fields) 

Windows에서 불필요한 줄 바꿈이 발생할 수 있습니다. 'a' 대신 'ab'을 사용하여 피해야합니다.

관련 문제