Python嵌套循环未按预期工作
我正在为学校做一项作业,我有一个文本文件:data.txt,它看起来像这样:(这里没有“name”,而是实际的名字,我只是替换了它们) 我有一个update.txt,如下所示: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
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()