我正在尝试获取用户输入并交叉引用它以查看它是否在文件中。但是,它只运行一次for循环;如果我第一次使用它是正确的,如果我第一次弄错了那么它永远不会,因为for循环只运行一次。当它重新运行while循环时,它永远不会重新运行for循环。为什么python只允许你运行一次循环,我该如何解决这个问题呢?这是代码,
testDate = open("Sales.txt")
def DateTest(Position):
validSyntax = False
Complete = False
DateIn = True
while Complete == False:
if DateIn == False:
print
print "That date is not in the file."
print
Date = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)
try :
Date = Date.strip().split(',')
Year = int(Date[0])
Month = int(Date[1])
Day = int(Date[2])
Date = (Year, Month, Day)
except:
print
print "That is invalid input."
print
else:
validSyntax = True
if validSyntax == True:
#It only runs this once, if I put a debug statement after the 'for' #then it never prints out, the loop never runs after the first time
for line in testDate:
line = line.strip().split(',')
yearTest = int(line[0])
monthTest = int(line[1])
dayTest = int(line[2])
dateTest = (yearTest, monthTest, dayTest)
if Date == dateTest:
Complete = True
print 'success'
DateIn = False
validSyntax = False
Response = DateTest("start")
答案 0 :(得分:3)
将文件视为可迭代文件会在读取时将读取指针移动到每行的末尾。到达文件末尾后,就无法再从中读取数据了。
您有2个选项。如果您愿意保持文件打开并重复读取,则可以在testDate.seek(0)
循环之前执行for
,这会将指针移回到开头。
或者,如果文件相对较小并且您想要避免持续的磁盘访问,则可以将整个文件读入脚本开头的行列表中,用以下内容替换顶部的open调用:{ {1}}