2017-04-05 42 views
0

我正在为我有一个文本文件的学校分配任务:data.txt看起来像这样:(而不是'名称'有实际的名字,我只是在这里替换它们)Python嵌套循环无法按预期工作

10001-31021 'name' 2015.12.30. 524432 

10001-31121 'name' 2016.03.21. 765432 

10012-34321 'name' 2016.02.20. 231231 

10201-11021 'name' 2016.01.10. 2310456 

而且我有一个UPDATE.TXT看起来像这样:

2016.03.22. 
10001-31021 'name' +20000 

10012-34321 'name' +35432 

10012-34321 'name' -10000 

10120-0'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() 

我的问题是与嵌套循环。我只是无法弄清楚为什么它不是第二次进入内部循环。它在第一次迭代中完美工作,但是在外循环中输入第二个时,它会忽略内循环。

非常感谢您的帮助。

+1

您测试了j和adat的值吗?如果循环计数器(在本例中为j)超出列表范围,循环将不会运行。我的猜测是,通过外部循环第一次通过adat到最后,内部循环检测到已经在内部循环的文件末尾。解决方案应该是关闭并重新打开该文件,或者将文件指针重新设置为开头。 – codingCat

+0

我看到,在adat中,您只需打开文件并存储返回的值。我没有看到adat.read()或adat.readlines()代码中的任何地方读取data.txt的内容。那么基于你在迭代什么? – DineshKumar

+0

在循环之前设置'num_lines'有什么意义?该值从不使用,导致不必要的I/O读取整个文件。 – chepner

回答

0

感谢codingCat的答案。我通过将文件指针返回到内部循环中文件的开头来解决问题