python-提取文件列表中出现的N个项目

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

我正试图将文件列表_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    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次出现。这是一个简单的修复还是需要很多的修改?真的很好,现在一切都很完美!谢谢你的编辑!伟大的