在同一个csv文件上读写

las*_*pal 24 python csv

我正在尝试读取和写入相同的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太大而无法记忆,那么您需要写入不同的文件名然后重命名.这可能会慢一些.