繁体   English   中英

Python - 删除列表中所有以单词/字符串开头的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM