0
저는 텍스트 파일이있는 학교의 과제를 처리하고 있습니다 : data.txt는 다음과 같습니다 : ('name'대신 실제 이름이 여기에 대체되었습니다.)파이썬 중첩 루프가 의도 한대로 작동하지 않습니다.
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()
내 문제는 중첩 된 루프입니다. 두 번째로 안쪽 루프에 들어가는 이유가 무엇인지 알 수 없습니다. 첫 번째 반복에서는 완벽하게 작동하지만 두 번째 루프를 바깥 쪽 루프에 입력하면 안쪽 루프가 무시됩니다.
도움을 주셔서 감사합니다.
j 및 adat 값을 테스트 했습니까? 루프 카운터 (이 경우 j)가 목록의 범위를 벗어나면 루프가 실행되지 않습니다. 내 생각 엔 외부 루프를 통해 처음에는 adat을 끝까지 실행하고 내부 루프는 내부 루프에 대한 파일의 끝에 이미 있음을 감지하는 것입니다. 해결책은 파일을 닫았다가 다시 열거 나 파일 포인터를 처음으로 다시 설정하는 것입니다. – codingCat
나는 그 파일을 열고 반환 된 값을 저장한다는 것을 알게되었다. data.txt의 내용을 읽으려면 코드에서 adat.read() 또는 adat.readlines()가 보이지 않습니다. 그래서 당신은 무엇을 반복하고 있습니까? – DineshKumar
루프 앞에'num_lines'를 설정하는 것은 무엇입니까? 이 값은 절대로 사용되지 않으므로 전체 파일을 읽는 데 불필요한 I/O가 발생합니다. – chepner