2024-04-25 09:26:30 发布
网友
我是新来的Python。我有一个单词表和一个很大的文件。我想从单词列表中删除文件中包含单词的行。在
单词列表按排序方式给出,可以在初始化时输入。我正在寻找解决这个问题的最佳方法。我现在做的线性搜索太多了。在
有什么建议吗?在
大文件中的行和单词需要以某种方式进行排序,在这种情况下,可以实现二进制搜索。这看起来不像是这样,你能做的最好的就是通过检查列表中的每个单词是否在给定的行中进行线性搜索。在
如果源文件只包含用空格分隔的单词,则可以使用集合:
words = set(your_words_list) for line in infile: if words.isdisjoint(line.split()): outfile.write(line)
注意,这不处理标点符号,例如,给定words = ['foo', 'bar']这样的一行不会被删除。要处理此问题,需要正则表达式:
words = ['foo', 'bar']
您可以使用集合论中的intersection来检查单词列表和一行中的单词是否有共同点。在
intersection
list_of_words=[] sett=set(list_of_words) with open(inputfile) as f1,open(outputfile,'w') as f2: for line in f1: if len(set(line.split()).intersection(sett))>=1: pass else: f2.write(line)
大文件中的行和单词需要以某种方式进行排序,在这种情况下,可以实现二进制搜索。这看起来不像是这样,你能做的最好的就是通过检查列表中的每个单词是否在给定的行中进行线性搜索。在
如果源文件只包含用空格分隔的单词,则可以使用集合:
注意,这不处理标点符号,例如,给定
^{pr2}$words = ['foo', 'bar']
这样的一行不会被删除。要处理此问题,需要正则表达式:您可以使用集合论中的
intersection
来检查单词列表和一行中的单词是否有共同点。在相关问题 更多 >
编程相关推荐