【问题标题】:Why this doble loop doesn't work as i expected?为什么这个双循环不能像我预期的那样工作?
【发布时间】:2015-09-16 20:50:54
【问题描述】:

我有两个 txt 文件,分别有 50000 和 25000 个数据来比较两个文件中的数据,但只比较第一行并将其添加到列表 res1 中,(打印只是为了了解它是如何工作的) 当我运行代码时,它会打印元组(如预期的那样),但随后只打印 lineCue 中的值并避免第二个循环,列表结果只是 lineCue 采用的第一个值,而不是两个文件中重复的所有值.什么时候 我用另一种方式尝试了列表内容有24808次重复...... :(

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

【问题讨论】:

  • 如果您确定没有任何重复,我建议您创建一个集合。您可以将每个文件存储在一个列表中,然后将该列表与in 进行比较。为了避免在比较行时\r\n`I recommend you to use .rstrip()` 出现问题,以防两个文件不一样

标签: list python-2.7 for-loop with-statement


【解决方案1】:

在外循环的第一次迭代中,您读取了整个文件con。您每次都需要从头开始阅读。为此,请在进入内部循环之前使用con.seek(0) 转到此文件的开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2016-01-28
    • 2021-09-07
    • 2014-10-14
    相关资源
    最近更新 更多