首页 > 解决方案 > 从文件中删除行,然后保存/覆盖原始文件

问题描述

我有一个时间序列数据文件,有时会在某些字段中生成“0.00”值。我想编写一个脚本来检查文件并删除所有包含“0.00”值的行。我设法读取了文件,删除了这些行并保存在另一个文件中。但是,我需要覆盖原始文件。这是因为另一个软件包正在处理这个我不能使用这些“0.00”值的特定文件。

这就是我得到的:

def remove_line(line, stop):
    return any([word in line for word in stop])

stop = ["0.00"]
with open("7290_0.dat", "r") as f, open("7290_1.dat", "w") as w: 
    for line in f:
        if not remove_line(line, stop):
            w.write(line)

提前感谢您的建议。

标签: pythonpython-3.x

解决方案


规范的、安全的、经过测试的解决方案是像您一样写入一个新文件,然后用新文件替换原始文件(使用os.rename())。

这避免了将整个文件加载到内存中以及许多潜在的其他问题(竞争条件等),并确保在重命名操作之前发生任何崩溃时不会丢失数据。

编辑:正如 Michael Butscher 所提到的,在 Windows 上,您可能需要os.remove()在执行 os.rename().


推荐阅读