就地删除CSV的某些行

时间:2017-01-04 00:13:14

标签: python csv

此:

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的某些行。

有更多pythonic方法可以就地删除某些CSV文件行吗?(而不是创建文件,删除原始文件,重命名等)

2 个答案:

答案 0 :(得分:6)

没有更多的Pythonic方式:你不能删除文件中间的东西。用你想要的东西写出一个新文件,然后重命名。

答案 1 :(得分:0)

我注意到你的代码没有导入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)