Python diff并获得新的部分

时间:2013-06-01 01:29:34

标签: python compare diff

我的问题非常基本。

我需要对由许多行创建的变量进行区分,并仅获取它们的新部分。在一个例子中理解它是非常简单的:

第一个变量:

  

您好

     

     

名称

     

第二个变量:

  

名称

     

     

彼得

     

     

     

上午

     

金发

我需要提取:

  

彼得

     

     

     

上午

     

金发

我需要在大文件中执行此操作。我该怎么办?

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果重复和顺序无关紧要,这很简单:

first = set(open('firstFile').readlines())
second = set(open('secondFile').readlines())

diff = second - first

如果输出订单很重要:

first = open('firstfile').readlines()
second = open('secondFile').readlines()

diff = [line for line in second if line not in first]

如果输入订单很重要,则需要澄清问题。

如果文件足够大,将它们加载到内存中是一个坏主意,你可能需要这样做:

secondFile = open('secondFile')
diffFile = open('diffFile')

for secondLine in secondFile:
    match = False
    firstFile = open('firstFile')
    for firstLine in firstFile:
        if firstLine == secondLine:
            match = True
            break
    firstfile.close()
    if not match:
        print >>diffFile, secondLine

secondFile.close()

答案 1 :(得分:1)

根据对该问题的评论,可以这样做:

first = set(x.strip() for x in open("tmp1.txt").readlines())
second = set(x.strip() for x in open("tmp2.txt").readlines())
print second - first

但是,如果我们认真对待“大”,在处理之前加载整个文件可能会占用比机器上可用的更多的内存。如果第一个文件足够小以适应内存而第二个文件不适合内存,则可以这样做:

first = set(x.strip() for x in open("tmp1.txt").readlines())
for line in open("tmp2.txt").xreadlines():
    line = line.strip()
    if line not in first:
        print line

如果第一个文件太大,我认为您需要求助于数据库。