我正在尝试读取和写入相同的CSV文件:
file1 = open(file.csv, 'rb')
file2 = open(file.csv, 'wb')
reader = csv.reader(file1)
writer = csv.writer(file2)
for row in reader:
if row[2] == 'Test':
writer.writerow( row[0], row[1], 'Somevalue')
Run Code Online (Sandbox Code Playgroud)
我的csv文件是:
val1,2323,Notest
val2, 2323,Test
所以基本上如果我的row[2]
价值是Test
我想用它替换它Some new value
.上面的代码给了我空的CSV文件.
Mic*_*las 18
您应该使用不同的输出文件名.即使您希望名称相同,也应使用一些临时名称,最后重命名文件.
当您以'w'(或'wb')模式打开文件时,此文件被"清除" - 整个文件内容消失.Python文档open()
说:
...'w'仅用于写入(将删除具有相同名称的现有文件),...
因此,在csv函数开始解析之前,您的文件将被删除.
Jam*_*ury 11
您无法同时在读取和写入模式下打开文件.
您的代码可以修改如下: -
# Do the reading
file1 = open(file.csv, 'rb')
reader = csv.reader(file1)
new_rows_list = []
for row in reader:
if row[2] == 'Test':
new_row = [row[0], row[1], 'Somevalue']
new_rows_list.append(new_row)
file1.close() # <---IMPORTANT
# Do the writing
file2 = open(file.csv, 'wb')
writer = csv.writer(file2)
writer.writerows(new_rows_list)
file2.close()
Run Code Online (Sandbox Code Playgroud)
正如杰森指出的那样,如果您的CSV太大而无法记忆,那么您需要写入不同的文件名然后重命名.这可能会慢一些.