ink*_*dmn 217
with open('document.csv','a') as fd:
fd.write(myCsvRow)
Run Code Online (Sandbox Code Playgroud)
使用'a'参数打开文件允许您附加到文件的末尾,而不是简单地覆盖现有内容.试试吧.
G M*_*G M 122
我更喜欢使用csv标准库中的模块和with语句来避免文件打开.
关键点是'a'在打开文件时使用附加功能.
import csv
fields=['first','second','third']
with open(r'name', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
Run Code Online (Sandbox Code Playgroud)
您可能会在Windows中遇到多余的新行.您可以尝试使用'ab'而不是使用它们'a'.
Nat*_*cha 17
根据@GM的回答并注意@John La Rooy的警告,我能够在'a'模式下追加一个新行打开文件.
即使在Windows中,为了避免换行问题,您必须将其声明为
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'})
Run Code Online (Sandbox Code Playgroud)
我没有尝试过常规作家(没有Dict),但我认为它也可以.
Joh*_*ooy 12
你打开文件的模式是'a'而不是'w'?
请参阅python文档中的读取和写入文件
7.2.读写文件
open()返回一个文件对象,最常用的有两个参数:open(filename,mode).
Run Code Online (Sandbox Code Playgroud)>>> 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文件中的二进制数据.在读取和写入此类文件时要非常小心地使用二进制模式.在Unix上,将'b'附加到模式没有什么坏处,因此您可以独立于平台使用它来处理所有二进制文件.
Ron*_*ian 11
如果文件存在并包含数据,则可以自动生成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)
Run Code Online (Sandbox Code Playgroud)
我按照以下方法在 .csv 文件中添加新行:
pose_x = 1
pose_y = 2
with open('path-to-your-csv-file.csv', mode='a') as file_:
file_.write("{},{}".format(pose_x, pose_y))
file_.write("\n") # Next line.
Run Code Online (Sandbox Code Playgroud)
[注意]:
mode='a' 是追加模式。小智 5
# 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)
Run Code Online (Sandbox Code Playgroud)
如果您使用 Pandas,您可以通过以下方式将数据帧附加到现有的 CSV 文件中:
df.to_csv('log.csv', mode='a', index=False, header=False)
Run Code Online (Sandbox Code Playgroud)
使用 mode='a' 我们确保我们追加而不是覆盖,而 header=False 我们确保我们只追加 df 行的值,而不是标题 + 值。