def is_number(file):
cList = file.read()
chars=len(cList)
t = 0
retlist=[]
while t<chars:
try:
int(cList[t])
int(cList[t + 1])
x = (cList[t] + cList[t + 1])
retlist.append(int(x))
t+=1
except ValueError:
try:
x = int(cList[t])
retlist.append(x)
except ValueError:
pass
t+=1
retlist.sort()
return retlist
好的,这是我的代码,它读取文件并将所有数字最多为99并将它们添加到列表中。但是当我把它归还给它时,由于某些原因它突然变空了,无法弄清楚为什么请帮忙!
def main():
while True:
try:
f = input("Enter the name of the file: ")
file = open(f + ".txt", "r")
is_number(file)
break
except IOError:
pass
print("The file %s could not be found, try again!" % (f))
numList = is_number(file)
print(numList)
main()的
调用函数的代码。
答案 0 :(得分:3)
Python(以及大多数其他语言)具有“文件指针”的概念 - 它是对文件中某些位置的引用。所有读写都从文件指针开始。例如,如果文件指针位于文件的开头,则调用read()
将读取整个文件。如果文件指针被移动,比如前进100个字符,则调用read()
将跳过前100个字符。
读取将始终将文件指针提前到它停止读取的点之后。因此,例如,如果您要求它只读取100个字节,则文件指针将前进100个字节,下一个读取将从那里读取。
在您的代码中,is_number
接受文件句柄并立即读取文件的全部内容。执行此操作时,文件指针将移动到文件的末尾。循环退出后,再次在最后打开的文件上调用is_number
。由于文件指针位于文件的末尾并且尚未移动,因此无需读取任何内容,因此将numList
设置为空字符串。
答案 1 :(得分:0)
只是为了添加Bryan的答案,您可以使用seek()
文件方法从头重新开始阅读。例如,如果f
是文件句柄的名称,f.seek(0)
将指向文件的开头。