我有一个文本文件,看起来像这样
testing
tested
tests
answer
questioned
questions
ask
run
running
我需要找到前4个字符相同的单词,如果这些单词的数量超过2个。预期的结果是
testing
tested
tests
如果文件中有几个字,则此代码有效。对于较大的输入文件,需要花费大量时间
from collections import Counter
mylist=list()
with open('test.txt', 'r') as f:
for i in f.readlines():
mylist.append(i[:4])
myn=Counter(mylist)
import pandas as pd
mys=pd.Series(myn)
myindex=list(mys[mys > 2].index)
newlist=list()
for x in myindex:
with open('test.txt', 'r') as f:
for i in f.readlines():
if x == i[:4]:
newlist.append(i)
有没有更好的方法达到同样的效果
代码的主要瓶颈是您要读取文件两次。对于大文件,最终结果是您将花费至少两倍的时间
如果你能把文件的全部内容都保存在内存中,我会做如下的事情:(前面的一个答案已经提出了这一点,但是使用了defaultdict)
如果您无法将内容保存在内存中,您将被迫再次读取文件,因此一个选项是将行号存储在字典中,并在第二次读取时仅打印存储的行号:
注意:如果调用File.readlines(),则在for循环的生命周期内,在迭代过程中,您已经在内存中保存了列表中的文件内容。如果您使用“for line in File”逐行迭代,我认为迭代是通过按需读取该行来完成的
n=substr...
-提取前4个字符-这是我们的索引c[n]++
-保持计数w[n]=...
-记住用换行符分隔的单词for(n in c)if(c[n]>2)print w[n]
-对于每个单词,如果计数大于2,则打印该单词李>使用GNU awk表示数组的数组,并假设您需要唯一字的计数:
相关问题 更多 >
编程相关推荐