我在处理while循环时遇到了错误。我可以输入我想要运行的编号,并将结果正确写入相应的.CSV。一旦该号码的部分完成运行,它会询问我是否想用新号码重试。它运行新的数字代码并创建新的.CSV,但文件大小保持在0kb。我认为这与完成文件关闭有关,但我已经在那里写了f#.close()。Python:在while循环中关闭文件的问题
例如:选择编号1,代码#1运行并正确保存.CSV,为另一个运行和新编号(#2)选择是,代码#2运行但未正确关闭,因此不保存任何信息第二个CSV。
无论我选择第一位还是第二位,都会发生这种情况。 (例如:第一选择3,3运行正常,并保存得很好,那么选择2和运行,但不保存正确。)
这里是我当前的代码:
f1 = file('1.csv', 'rb')
f2 = file('2.csv', 'rb')
f3 = file('3.csv', 'rb')
c1 = csv.reader(f1)
c2 = csv.reader(f2)
c3 = csv.reader(f3)
number = raw_input("Enter number: ")
while True:
if number == "1":
f4 = file('No_1_Results.csv', 'wb')
c4 = csv.writer(f4)
<snip> #do stuff here
print "Took ", time.time() - start, "seconds."
f4.close()
reset_answer = raw_input("Again? Type Y or N : ")
if reset_answer == ("n" or "N"):
print "Bye! from #1"
break
if reset_answer == ("y" or "Y"):
number = raw_input("Enter new number #: ")
continue
if reset_answer != ("n" or "N" or "y" or "Y"):
print "Y or N only allowed. Try again."
continue
if number == "2":
f5 = file('No_2_Results.csv', 'wb')
c5 = csv.writer(f5)
<snip> #do stuff here
print "Took ", time.time() - start, "seconds."
f5.close()
reset_answer = raw_input("Again? Type Y or N : ")
if reset_answer == ("n" or "N"):
print "Bye! from #2"
break
if reset_answer == ("y" or "Y"):
number = raw_input("Enter new number #: ")
continue
if reset_answer != ("n" or "N" or "y" or "Y"):
print "Y or N only allowed. Try again."
continue
if number =="3":
f6 = file('No_3_Results.csv', 'wb')
c6 = csv.writer(f6)
<snip> #do stuff here
print "Took ", time.time() - start, "seconds."
f6.close()
reset_answer = raw_input("Again? Type Y or N : ")
if reset_answer == ("n" or "N"):
print "Bye! from #3"
break
if reset_answer == ("y" or "Y"):
number = raw_input("Enter new number #: ")
continue
if reset_answer != ("n" or "N" or "y" or "Y"):
print "Y or N only allowed. Try again."
continue
if number is not "1" or "2" or "3":
print "Invalid number selected."
number = raw_input("Please choose a number: ")
continue
f1.close()
f2.close()
f3.close()
注意:使用Python 2.6在Windows上仍然在学python -
难道你没发现该代码有些重复? –
你的文件逻辑看起来很好。开幕式和闭幕式之间在''中发生了什么? –
为什么不把你的整个'如果number == n:'代码作为一个函数,所以你不必输入三个(或更多,如果你改变你的代码)? –