0

我的问题很基本。

我需要区分由多行组成的变量,并且只获取其中的新部分。在一个例子中更容易理解:

第一个变量:

你好

我的

姓名

第二个变量:

姓名

彼得

一世

金发女郎

我需要提取:

彼得

一世

金发女郎

我需要在大文件中进行。我该怎么做?

非常感谢你。

4

2 回答 2

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()
于 2013-06-01T02:08:24.687 回答
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

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

于 2013-06-01T02:10:14.990 回答