Python中读写同一个CSV文件

7

在Python中,我们是否可以使用csv库同时编辑和读取同一个CSV文件?

CSV文件是否可以被打开以进行编辑和追加操作?

如果可以,该如何实现?


嘿,Jacob,你为什么删除了pandas标签。它是一个用于数据分析的库,所以我认为它应该包含处理csv文件的丰富机制。如果你不打算回答我的问题,请让能够回答的人来回答。我也需要pandas专家的帮助。 - maheshakya
问题可能需要更具体一些,并提供您正在尝试做什么的见解。到目前为止,您尝试了什么?您需要以何种方式修改文件? - bikeshedder
这是一个包含50多列和40万行以上的大型CSV文件。我想用全新的一组值替换其中的几列。 - maheshakya
1个回答

3

简短回答:不行


详细回答:这取决于具体情况。

使用CSV写入器进行数据追加完全可行。只需在追加“a”模式下打开文件即可:

with file("data.csv", "a" as fh:
    w = csvwriter(fh):
    w.writerow(...)

编辑CSV文件并不简单,因为除非你正在编辑的列是固定长度,否则你需要插入和删除文件的部分内容。 csv 模块没有内置的方法来实现这一点。

您可以打开原始文件,删除(或重命名原始文件)并打开一个同名的新文件:

with file("data.csv", "r") as rfh:
    os.remove("data.csv"):
    r = csvreader(rfh)
    with file("data.csv", "w") as wfh:
        w = csvwriter(wfh)
        # ... read from r and write to w

在Linux下,原始文件将保持可读状态,直到关闭它,因此您不需要事先重命名它。我对Windows不太熟悉,所以您可能需要在创建新文件之前重命名原始文件,并在关闭后删除旧文件。
另一个重要的点:如果您的写入仅限于追加数据,则可以毫无问题地从/向同一文件读取和写入。
with file("data.csv", "r") as rfh, file("data.csv", "a") as wfh:
    r = csvreader(rfh)
    w = csvwriter(wfh)
    # you can read using r and append using a

请小心 - 您的读者将能够使用writer读取您刚刚编写的行。请注意不要陷入无限循环,从而导致文件非常大。


你可以使用r读取并使用a追加。

- Noel Bautista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接