Python仅输出在文件b

时间:2018-08-17 19:32:04

标签: python-2.7

我正在尝试编写脚本以仅从文件a中获取文件b中找不到的行。

归档一个:

aaa
aba
atca
baf

文件b:

aba
baf

预期输出:

aaa
atca

1 个答案:

答案 0 :(得分:2)

我可以想到两种主要方法:

渴望内存的方式

with open("file_b") as fb:
    lines = fb.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
lines = [x.strip() for x in lines]
with open("file_a") as fa:
    ifa = iter(fa)
    for line in ifa:
        sline = line.strip()
        if sline not in lines:
            print(sline)

优点:

  • 由于仅读取每个文件一次而降低了磁盘I / O

缺点:

  • 由于同时加载所有file_b,因此对内存的要求更高

饥饿的I / O方式

with open("file_a") as fa:
    ifa = iter(fa)
    for linea in ifa:
        slinea = linea.strip()
        unique = True
        with open("file_b") as fb:
            ifb = iter(fb)
            for lineb in ifb:
                slineb = lineb.strip()
                if slineb == slinea:
                    unique = False
                    break
        if unique:
            print(slinea)

优点:

  • 内存不足

缺点:

  • 读取file_b中每一行的所有file_a

结论

我真的不知道您要执行的操作的参数,因此我不知道您需要优化的内容(如果有的话)。在工作中,我通常会处理比工作站内存大很多倍的文件,但是我也知道磁盘I / O比内存访问慢得多。所以选择你的毒药。 :)