比较python中的两个文件并在新文件中保存行差异

时间:2014-09-26 12:35:05

标签: python file file-io comparison

我有两个文本文件,其数据类似于下面的示例。 使用python,我想保存到一个新文件,第一行的行没有出现在第二个文件中。这些行不包含在文件中。

----- ---- 第一个文件 ---------- 第二个文件

   1   116969        116969
   2   116973        116977
   3   116977        117000
   4   117000        117028
   5   117004        117032
   6   117028        117036
   7   117032        117066
   8   117036        117104
   9   117062
   10  117066
   11  117097
   12  117104

新文件必须具有此结构。

2
5
9
11

修改:到目前为止,这是我的代码。列表sendfiles包含具有原始数据的文件的路径。列表receivefiles包含具有较少数据的文件的路径。

    for x in range(0, len(sendfiles)):      
       f1 = open(sendfiles[x], 'r').readlines()
       f2 = open(receivefiles[x], 'r').readlines()
       path = sendfiles[x].strip('send.txt')
       final_file = path + 'out.txt'
       with open(final_file,'w') as f:
           ...

在unix中,我使用diff -f命令,但知道我必须编写一些python代码来执行此操作。

Edit2 :这是send.txt的示例,这是receive.txt

的示例

1 个答案:

答案 0 :(得分:1)

f1 = open('a', 'r').readlines()
f2 = open('b', 'r').readlines()
out = []
count = 1 
for i in f1:
    flag = False
    for j in f2:
        if i == j:
            flag = True
    if not flag:
        out.append(count)
    count+=1
for o in out:
    print o

优化一个

f1 = open('a', 'r').readlines()
f2 = open('b', 'r').readlines()
out = []
indexa = 0
indexb = 0
out = []
while(1):
    try:
        if f1[indexa][:-1] ==  f2[indexb][:-1]:
            indexa +=1
            indexb +=1
        elif f1[indexa][:-1] > f2[indexb][:-1]:
            indexb += 1
        elif f1[indexa][:-1] < f2[indexb][:-1]:
            out.append(indexa+1)
            indexa += 1
    except IndexError:
        break
for i in out:
    print i