为什么Python CSV模块在程序运行后打开CSV文件时变为只读?
我正在使用一个程序(如下所示)来比较两个CSV文件中某些列的相似性,然后在数据符合特定条件时创建一个第三个文件(比如两列相同但第三列不同),这样我就可以更新电子邮件列表。
不过,当我运行程序后尝试打开结果文件results.csv时,Windows Excel只会以只读模式打开这个文件。
有没有什么想法?
这是我的代码:
import csv
sample_data = open("sample.csv", "r")
lib_data = open("library.csv", "r")
csv1 = csv.reader(sample_data)
csv2 = csv.reader(lib_data)
results = open("results.csv", "w")
res_csv = csv.writer(results)
limit = 1071
limit2 = 1001
x = 0
y = 0
while (y != limit):
row1 = csv1.__next__()
while (x != limit2):
row2 = csv2.__next__()
if (row1[0] == row2[3] and row1[1] == row2[2] and row1[2] != row2[5]):
print ("SAMPLE:")
print (row1[0], ", ", row1[1], ", ", row1[2])
print ("LIBRARY:")
print (row2[3], ", ", row2[2], ", ", row2[5])
print("\n")
res_csv.writerow(row1)
x = x+1
y = y+1
x = 0
lib_data.seek(0)
5 个回答
2
我在使用Python 2.7的时候也遇到了同样的问题,之前的解决办法都没能帮我解决。
解决办法是:只需要加上“quoting”,比如:
res_csv=csv.writer(results,quoting=csv.QUOTE_ALL).
这样就解决了我的问题。
6
使用 with
可以确保文件会被正确关闭:
with open("sample.csv", "r") as sample_data:
with open("library.csv", "r") as lib_data:
with open("results.csv", "w") as results:
# other code
如果你使用的是 Python 2.7 及以上版本,甚至可以在一个 with
语句中放多个变量。
4
关闭文件
results.close()