[英]Python - Remove all the lines starting with word/string present in a list
我正在尝试解析巨大的 50K 行文件,其中我必须删除以预定义列表中存在的单词开头的任何行。
目前,我已经尝试了以下操作,但输出文件 (DB12_NEW) 无法正常工作 -
rem = ['remove', 'remove1', 'remove2'....., 'removen']
inputFile = open(r"C:\file", "r")
outputFile = open(r"C:\file_12", "w")
lines = inputFile.readlines()
inputFile.close()
for line in lines:
for i in rem:
if line.startswith(i):
outputFile.write('\n')
else:
outputFile.write(line)
我得到的文件与我最初输入的输出相同......脚本没有删除以列表中存在的任何字符串开头的行。
你能帮助理解如何实现这一目标吗?
对str.startswith
使用tuple
而不是list
。
# rem = ['remove', 'rem-ove', 'rem ove']
rem = ('remove', 'rem-ove', 'rem ove')
with open('DB12', 'r') as inputFile, open('DB12_NEW', 'w') as outputFile:
for line in inputFile.readlines():
if not line.startswith(rem):
outputFile.writelines(line)
当前,您一次检查该行是否以删除列表中的一个单词开头。 例如:
如果该行以“rem ABCDF...”开头,并且在您的循环中检查该行是否以“remove”开头,则您的 if 语句返回 false 并将该行写入输出文件。
你可以尝试这样的事情:
remove = ['remove', 'rem-ove', 'rem', 'rem ove' ...... 'n']
inputFile = open(r"C:\DB12", "r")
outputFile = open(r"C:\DB12_NEW", "w")
for line in inputFile.splitlines():
if not any(line.startswith(i) for i in remove):
outputFile.write(line)
在any
关键字只返回False
,如果所有元素也False
。
有时这可能是由前导/尾随空格引起的。
尝试使用strip()
去除空白区域并检查。
rem = [x.strip() for x in rem]
lines = [line.strip() for line in lines]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.