python - 从文件中删除行,然后保存/覆盖原始文件
问题描述
我有一个时间序列数据文件,有时会在某些字段中生成“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)
提前感谢您的建议。
解决方案
规范的、安全的、经过测试的解决方案是像您一样写入一个新文件,然后用新文件替换原始文件(使用os.rename()
)。
这避免了将整个文件加载到内存中以及许多潜在的其他问题(竞争条件等),并确保在重命名操作之前发生任何崩溃时不会丢失数据。
编辑:正如 Michael Butscher 所提到的,在 Windows 上,您可能需要os.remove()
在执行 os.rename()
.
推荐阅读
- php - 设置和检索会话值 wordpress
- python-3.x - Error in fitting an RNN LSTM model
- python - Python:对列表中的所有元素和子元素执行操作
- r - 使用 R 中的用户构建功能对大型数据集(具有个人特定切点的加速度测量数据)进行有效的按组处理?
- browser-cache - 子域是否共享缓存配额?
- neo4j - Neo4j 中的邻域聚合查询
- python - Python绘图图像保存错误
- algorithm - 确定是否有任何组合从设定的总和到目标值
- c# - 这是使用 System.Net 的正确方法吗?
- docker-compose - Docker 启动失败,命名管道错误