Python嵌套循环未按预期工作

Python嵌套循环未按预期工作,python,nested-loops,Python,Nested Loops,我正在为学校做一项作业,我有一个文本文件:data.txt,它看起来像这样:(这里没有“name”,而是实际的名字,我只是替换了它们) 我有一个update.txt,如下所示: 2016.03.22. 10001-31021 'name' +20000 10012-34321 'name' +35432 10012-34321 'name' -10000 10120-00123 'name' +120334 10001-31021 'name' +5000 10210-410

我正在为学校做一项作业,我有一个文本文件:data.txt,它看起来像这样:(这里没有“name”,而是实际的名字,我只是替换了它们)

我有一个update.txt,如下所示:

2016.03.22.
10001-31021 'name'  +20000

10012-34321 'name'  +35432

10012-34321 'name'  -10000

10120-00123 'name'  +120334

10001-31021 'name'  +5000

10210-41011 'name'  -6000

10201-11021 'name'  +100210

12345-32100 'name'  +123456
我必须根据update.txt包含的最后一列的更改生成一个newdata.txt文件

这是我目前的代码:

adat = open("data.txt", "r")
newdata = open("newdata.txt", "w")
update = open("update", "r")

date = update.readline().decode("utf-8-sig").encode("utf-8").splitlines()
num_lines = sum(1 for line in open('update'))
elsociklus = 0
masodikciklus = 0

for num_lines in update:
    updateData = re.search("(.{11}\t)(\D+\t)([+-]\d+)", num_lines)
    elsociklus = elsociklus + 1
    print("elsociklus: " + str(elsociklus))
    for j in adat:
        data = re.search("(.{11}\t)(\D+\t)(\d{4}\.\d{2}\.\d{2}\.\t)(\d+)", j)
        masodikciklus = masodikciklus + 1
        print("masodikciklus: " + str(masodikciklus))
        if data != None:
            if updateData.group(1) == data.group(1):
                print("regi: " + data.group(0))
                print("update: " + updateData.group(0))
                print("uj: " + data.group(1) + data.group(2) + date[0] + "\t" + str(int(data.group(4)) + int(updateData.group(3))))
                newdata.write(data.group(1) + data.group(2) + date[0] + "\t" + str(int(data.group(4)) + int(updateData.group(3))))
                newdata.write("\n")
            else:
                print("nincs valtozas: " + data.group(0))

adat.close()
newdata.close()
update.close()
我的问题是嵌套循环。我只是不明白为什么它没有第二次进入内部循环。它在第一次迭代时工作得很好,但是当在外循环中进入第二次迭代时,它只是忽略了内循环


提前感谢您的帮助。

感谢codingCat提供的答案。我修复了这个问题,将文件指针返回到内部循环中文件的开头

是否测试了j和adat的值?如果循环计数器(在本例中为j)超出列表范围,则循环不会运行。我的猜测是,您第一次通过外部循环运行adat,直到最后,而内部循环正在检测内部循环的文件末尾。解决方案应该是关闭并重新打开文件,或者将文件指针设置回起始位置。我在代码的任何地方都看不到adat.read()或adat.readlines()来读取data.txt的内容。那么,根据您迭代的内容?在循环之前设置
num\u行
有什么意义?从不使用该值,导致读取整个文件时不必要的I/O。
adat = open("data.txt", "r")
newdata = open("newdata.txt", "w")
update = open("update", "r")

date = update.readline().decode("utf-8-sig").encode("utf-8").splitlines()
num_lines = sum(1 for line in open('update'))
elsociklus = 0
masodikciklus = 0

for num_lines in update:
    updateData = re.search("(.{11}\t)(\D+\t)([+-]\d+)", num_lines)
    elsociklus = elsociklus + 1
    print("elsociklus: " + str(elsociklus))
    for j in adat:
        data = re.search("(.{11}\t)(\D+\t)(\d{4}\.\d{2}\.\d{2}\.\t)(\d+)", j)
        masodikciklus = masodikciklus + 1
        print("masodikciklus: " + str(masodikciklus))
        if data != None:
            if updateData.group(1) == data.group(1):
                print("regi: " + data.group(0))
                print("update: " + updateData.group(0))
                print("uj: " + data.group(1) + data.group(2) + date[0] + "\t" + str(int(data.group(4)) + int(updateData.group(3))))
                newdata.write(data.group(1) + data.group(2) + date[0] + "\t" + str(int(data.group(4)) + int(updateData.group(3))))
                newdata.write("\n")
            else:
                print("nincs valtozas: " + data.group(0))

adat.close()
newdata.close()
update.close()