python-提取文件列表中出现的N个项目
我正试图将文件列表_1.txt中每一项的100次首次出现提取到一个新文件中。项目列表(在下面的代码中称为target)由文件_1.txt的第一列组成python-提取文件列表中出现的N个项目,python,list,range,Python,List,Range,我正试图将文件列表_1.txt中每一项的100次首次出现提取到一个新文件中。项目列表(在下面的代码中称为target)由文件_1.txt的第一列组成 now:::ADV 1.48 be:::V 1.85 5488284 then:::ADV 1.44 be:::V 1.85 3994804 now:::ADV 1.48 have:::V 2.18 1760901 then:::ADV 1.44
now:::ADV 1.48 be:::V 1.85 5488284
then:::ADV 1.44 be:::V 1.85 3994804
now:::ADV 1.48 have:::V 2.18 1760901
then:::ADV 1.44 have:::V 2.18 1099284
enough:::ADV 1.33 be:::V 1.85 928947
suppose:::V 1.37 be:::V 1.85 874407
ever:::ADV 1.48 be:::V 1.85 859428
文件1.txt
now:::ADV 1.48 be:::V 1.85 5488284
then:::ADV 1.44 be:::V 1.85 3994804
now:::ADV 1.48 have:::V 2.18 1760901
then:::ADV 1.44 have:::V 2.18 1099284
enough:::ADV 1.33 be:::V 1.85 928947
suppose:::V 1.37 be:::V 1.85 874407
ever:::ADV 1.48 be:::V 1.85 859428
我尝试的代码如下:
with open('file_1.txt', 'r') as infile, open('file_2.txt', 'w') as outfile:
target = []
i = 1
for line in infile:
columns = line.split("\t")
column_1 = columns[0]
if column_1 not in target:
target.append(column_1)
for item in target:
if line.startswith(item) and i <=100:
outfile.write(line)
i += 1
以open('file_1.txt','r')作为填充,open('file_2.txt','w')作为输出文件:
目标=[]
i=1
对于填充中的线:
列=行。拆分(“\t”)
列_1=列[0]
如果列_1不在目标中:
target.append(第1列)
对于目标中的项目:
如果line.startswith(item)和i如果我正确理解您的需求,那么如果没有一点缓冲,就不可能实现它们。下面的方法使用字典来实现这一点。它基于您的代码:
with open('file_1.txt', 'r') as infile, open('file_2.txt', 'w') as outfile:
target = {}
for line in infile:
columns = line.split("\t")
column_1 = columns[0]
try:
target[column_1].append(line)
if len(target[column_1]) == 100:
for tline in target[column_1]:
outfile.write(tline)
target[column_1] = None # mark word as finished
except KeyError: # we haven't seen that word before -> start new list
target[column_1] = [line]
except AttributeError: # this is raised each time we try appending to None
pass
你是需要按照目标出现的顺序输出,还是按照第100次出现的顺序输出就可以了?@Paul Panzer只要在第100次出现的范围内,顺序就不重要了。很好,它正好产生了我想要的输出,非常感谢!我真的很感谢你的帮助!非常感谢。你的代码只是漏掉了每个单词的第一次出现,这是你在之前的评论中问的吗?如果我误解了,我很抱歉。所以文件_1.txt是按频率排序的,我想要一个单词的前100次出现。这是一个简单的修复还是需要很多的修改?真的很好,现在一切都很完美!谢谢你的编辑!伟大的