在CSV文件中原地删除部分行

5

This:

import csv
with open('original.csv', 'rb') as inp, open('new.csv', 'wb') as out:
    writer = csv.writer(out)
    for row in csv.reader(inp):
        if row[2] != "0":
            writer.writerow(row)
os.remove('original.csv')
os.rename('new.csv', 'original.csv')

允许删除CSV文件的某些行。

是否有更符合Python风格的方法来就地删除CSV文件的某些行?(而不是创建文件,删除原始文件,重命名等。)

2个回答

9

没有更加Pythonic的方法:你不能在文件中间删除内容。你需要将你想要的内容写出到一个新文件中,然后再将其重命名。


你也可以从文件中读取,关闭它,进行必要的更改,然后用更改后的内容覆盖原文件。 - Andrew Lamarra
1
@AndrewLamarra 你能发一篇回答吗? - Basj

1
我注意到你的代码没有导入os模块,尽管你使用了它。以下是一种不使用该模块实现你所需功能的方法。
这将首先以读取模式打开文件以获取数据,然后以写入模式进行覆盖。请注意,你需要将csv.reader(f)语句传递给list()函数,否则数据变量将仅指向CSV文件的内存地址,一旦关闭,就无法处理内容。 list()实际上将为你复制信息。
import csv

with open("original.csv", "rb") as f:
    data = list(csv.reader(f))

with open("original.csv", "wb") as f:
    writer = csv.writer(f)
    for row in data:
        if row[2] != "0":
            writer.writerow(row)

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