답변:
with open('document.csv','a') as fd:
fd.write(myCsvRow)
'a'
매개 변수를 사용 하여 파일을 열면 기존 컨텐츠를 단순히 덮어 쓰지 않고 파일 끝에 추가 할 수 있습니다. 해봐
파일을 열어 두지 않기 위해 csv
표준 라이브러리 의 모듈과 with
명령문을 사용 하여이 솔루션을 선호합니다 .
요점은 'a'
파일을 열 때 추가하는 데 사용됩니다.
import csv
fields=['first','second','third']
with open(r'name', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
Python 2.7을 사용하는 경우 Windows에서 불필요한 새 줄이 발생할 수 있습니다. 그러나 이것을 'ab'
대신 사용하여 피하는 것을 피할 수 'a'
는 있지만 TypeError를 발생시킵니다 . 파이썬의 'str'과 파이썬 3.6의 CSV 가 아닌 바이트와 유사한 객체가 필요합니다 . newline=''
Natacha가 제안한 것처럼을 추가하면 Python 2와 3 사이의 역 호환성 이 발생합니다 .
@GM의 대답에 따라 @John La Rooy의 경고에주의를 기울여 파일을 'a'
모드 에서 여는 새 행을 추가 할 수있었습니다 .
창에서도 줄 바꿈 문제를 피하려면로 선언해야합니다
newline=''
.이제 파일을
'a'
모드없이 (b없이) 열 수 있습니다 .
import csv
with open(r'names.csv', 'a', newline='') as csvfile:
fieldnames = ['This','aNew']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'This':'is', 'aNew':'Row'})
나는 일반 작가 (Dict 제외)와 함께 시도하지 않았지만 괜찮을 것이라고 생각합니다.
'w'대신 'a'모드로 파일을 열었습니까?
Python 문서에서 파일 읽기 및 쓰기를 참조하십시오.
7.2. 파일 읽기 및 쓰기
open ()은 파일 객체를 반환하며 가장 일반적으로 open (filename, mode)의 두 인수와 함께 사용됩니다.
>>> f = open('workfile', 'w') >>> print f <open file 'workfile', mode 'w' at 80a0960>
첫 번째 인수는 파일 이름이 포함 된 문자열입니다. 두 번째 인수는 파일이 사용되는 방식을 설명하는 몇 개의 문자를 포함하는 또 다른 문자열입니다. 파일을 읽을 때만 'r', 쓰기 전용 인 'w'(같은 이름의 기존 파일은 지워짐) 및 'a'는 추가 할 파일을 엽니 다. 파일에 기록 된 모든 데이터가 자동으로 끝에 추가됩니다. 'r +'는 읽고 쓸 수있는 파일을 엽니 다. mode 인수는 선택 사항입니다. 생략하면 'r'이 가정됩니다.
Windows에서 모드에 추가 된 'b'는 파일을 이진 모드로 열리므로 'rb', 'wb'및 'r + b'와 같은 모드도 있습니다. Windows의 Python은 텍스트 파일과 이진 파일을 구분합니다. 텍스트 파일의 줄 끝 문자는 데이터를 읽거나 쓸 때 자동으로 약간 변경됩니다. 파일 데이터에 대한 이러한 비하인드 수정은 ASCII 텍스트 파일에 적합하지만 JPEG 또는 EXE 파일에서와 같은 이진 데이터를 손상시킵니다. 이러한 파일을 읽고 쓸 때 바이너리 모드를 사용하도록주의하십시오. 유닉스에서는 'b'를 모드에 추가하는 것이 아프지 않으므로 모든 바이너리 파일에 대해 플랫폼 독립적으로 사용할 수 있습니다.
파일이 존재하고 데이터를 포함하는 경우 자동으로 fieldname
매개 변수 를 생성 할 수 있습니다 csv.DictWriter
.
# read header automatically
with open(myFile, "r") as f:
reader = csv.reader(f)
for header in reader:
break
# add row to CSV file
with open(myFile, "a", newline='') as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writerow(myDict)
# I like using the codecs opening in a with
field_names = ['latitude', 'longitude', 'date', 'user', 'text']
with codecs.open(filename,"ab", encoding='utf-8') as logfile:
logger = csv.DictWriter(logfile, fieldnames=field_names)
logger.writeheader()
# some more code stuff
for video in aList:
video_result = {}
video_result['date'] = video['snippet']['publishedAt']
video_result['user'] = video['id']
video_result['text'] = video['snippet']['description'].encode('utf8')
logger.writerow(video_result)