python-2.7 - 使用 Python 删除文件中的行
问题描述
我有输入文件“input.dat”包含一些像这样的值:
41611 2014 12 18 0 0
41615 2014 12 18 0 0
41625 2014 12 18 0 0
41640 2014 6 14 3 3
42248 2014 12 18 0 0
42323 2014 12 18 0 0
42330 2014 8 13 7 7
42334 2014 12 18 0 0
42335 2014 12 18 0 0
...
我有很多数据集文件,但似乎有很多不需要的数据如何立即删除这种情况下的多行 41640 和 42330 及其整个行值。现在我使用了这个脚本:
with open(path+fname,"r") as input:
with open("00-new.dat","wb") as output:
for line in input:
if line!="41640"+"\n":
output.write(line)
结果:输出中仍然存在数据 41640。有任何想法吗??
解决方案
您需要更改您的条件 - 它现在如何检查整行是否等于41640
. 每个line
都等于您正在读取的整行数据,后跟一个\n
. 您的程序的固定版本如下所示:
with open("00-old.dat","r") as input:
with open("00-new.dat","wb") as output:
for line in input:
if "41640" not in line:
output.write(line)
要删除多行,您可以all()
结合使用列表理解,例如本文中所述,
if all(nb not in line for nb in del_list):
output.write(line)
del_list
您要删除的值列表在哪里,
del_list = ["41615", "41640", "42334"]
此外,由于 Python 的运算符优先级,您的原始条件将始终计算为True
. 那是因为即使41640!=line
是假的,\n
也会将其添加并(转换后)解释为True
。基本上,!=
首先评估的是,而不是字符串连接后跟 a !=
。
推荐阅读
- node.js - 如何检查 Azure Blob createReadStream 的错误?
- angular - Angular5 - 如何在不丢失数据的情况下返回?
- r - 使用 1:n 子集数据表
- html - CSS 网格 - 跨度重叠,无法内联
- linux - Apache Atlas - 如何在 EMR 上安装以及如何更改用户/密码
- clojure - 等待原子更改超时
- php - 无法正则表达式文本区域,但如果它是输入则可以
- json - Chrome 无法读取我的清单文件(扩展制作)
- json - 如何在函数中实现泛型对协议的条件一致性?
- charts - 如何将变量传递给 .setOption