繁体   English   中英

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

[英]python - extract N occurrences of items in a list of a file

我正在尝试将file_1.txt列表的每个项目的100个首次出现提取到一个新文件中。 项目列表(在下面的代码中称为目标 )由file_1.txt的第一列组成

file_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

当然,这只是将file_1.txt的前100行打印到file_2.txt。 是否存在一次仅读取1行,将其附加到目标并搜索100个首次出现的pythonic方法,将其打印到file_2.txt并继续在file_1.txt的第1列中的下一个唯一单词?

我真的很感谢任何帮助或建议。

如果我正确地理解了您的需求,那么没有一点缓冲就不可能实现它们。 以下方法为此使用了字典。 它基于您的代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM