为什么Python CSV模块在程序运行后打开CSV文件时变为只读?

2 投票
5 回答
6452 浏览
提问于 2025-04-17 11:05

我正在使用一个程序(如下所示)来比较两个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()

撰写回答