阅读并同csv文件
问题描述:
我试图读取并在同一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')
我的CSV文件:
val1,2323,Notest
val2, 2323,Test
所以基本上如果我的row[2]
值是Test
我wa nt用Some new value
替换它。 上面的代码给我空的CSV文件。
答
您应该使用不同的输出文件名。即使您希望名称相同,您也应该使用一些临时名称,最后重命名文件。
当您以'w'(或'wb')模式打开文件时,该文件被“清除” - 整个文件内容消失。为open()
Python的文件说:
...“w”表示只写(具有相同名称的现有文件将被删除),...
所以之前CSV功能启动文件被删除解析它。
答
如果您的csv文件不够大(以爆炸内存),请将它全部读入内存并关闭文件,然后再以写入模式打开它。
或者您应该考虑写入新文件而不是同一个文件。
答
您无法同时打开读取和中的文件一次写入模式。
你的代码可以作如下修改: -
# 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()
贾森指出,如果你的CSV是太大了你的记忆,那么你就需要写一个不同的文件名,然后将其重命名。这可能会慢一点。
答
无法在python中以两种不同的模式打开相同的文件。您必须在以另一种模式打开文件之前释放file_name.close()中的某个文件指针!