2015-06-30 57 views
0

我有两个txt文件,用50000和25000数据来比较哪些数据在两个文件中,但只有第一行进行比较并添加到列表res1中(打印只是为了了解它是如何工作的)当我运行代码打印元组(如预期的那样),但只打印lineCue中的值并避免第二个循环,列表结果只是lineCue提取的第一个值,而不是两个文件中重复的所有值。当 我试图通过另一种方式列表内容有24808个重复... :(为什么这个doble循环无法正常工作?

contratos = 'C:\\CONTRATOS.txt' 
cuentas = 'C:\\CUENTAS0.txt' 

res1 = [[], []] # res1[0] -> ID, res1[1] -> NO ID 
res2 = [] # res2 -> REPE 
with open(cuentas, 'rb') as cue: 
    with open(contratos, 'rb') as con: 
     for lineCue in cue.xreadlines(): 
      print(lineCue) 
      for lineCon in con.xreadlines(): 
       print(lineCue, lineCon) 
       if lineCue == lineCon: 
        res1[0].append(lineCon) 
print(res1[0]) 

输出:

['O199924\r\n'] 

文件: https://dl.dropboxusercontent.com/u/33113171/CONTRATOS.txt https://dl.dropboxusercontent.com/u/33113171/CUENTAS0.txt

+0

如果您确定没有任何重复,我会推荐创建一个集合。您可以将每个文件存储在一个列表中,然后将这个列表与'in'进行比较。为了避免出现'\ r \ n \'的问题,我建议您在比较这些行时使用'.rstrip()',以防两个文件都不一样 – Llopis

回答

1

在的第一次迭代外循环你读整个文件con。你需要从每次开始读取它。这样做,使用con.seek(0)去到这个开始文件进入内部循环之前。