Python删除包含非字母数字标记的行

时间:2015-05-24 13:33:43

标签: python

感谢你们的帮助!巨大的帮助

到目前为止,这是我的脚本,

import re
bad_words = '[^a-zA-Z\d\s:]'

with open('keywords.txt', encoding="utf8") as oldfile, open('newfile.txt', 'w') as newfile:
    for line in oldfile:
        if not re.search(bad_words, line):
            newfile.write(line)

lines_seen = set() # holds lines already seen
outfile = open('cleankeywords.txt', "w")
for line in open('newfile.txt', "r", encoding="utf8"):
    if line not in lines_seen: # not a duplicate
        outfile.write(line)
        lines_seen.add(line)
outfile.close()

如何通过删除处理的中间文件来提高效率:newfile.txt

这样两个动作都会在彼此之后发生。另外有一种方法可以使用tkinter,输出名称和目录等来确定输入文件的位置

谢谢!

1 个答案:

答案 0 :(得分:0)

你写它的方式,你正在检查整个字符串是否符合要求。 如果bad_words是正则表达式,则必须使用re模块来处理它。

import re
bad_words = '[^a-zA-Z\d\s:]'

with open('keywords.txt') as oldfile, open('newfile.txt', 'w') as newfile:
    for line in oldfile:
        if not re.match(bad_words, line):
            newfile.write(line)

如果您有一个非允许字符的列表(或字符串),您的代码就可以工作,那么您可以使用您的算法迭代它并检查:

bad_words = ['/',':','.','%','#','$','*',.....]
#or if bad_words was a string like '%$£#@!¨&(*&)'
if not any(bad_word in line for bad_word in bad_words):
    newfile.write(line)

但是在处理正则表达式时,您应该使用re