我的程序清空了我的清单,我不明白为什么

时间:2014-09-16 18:25:45

标签: python

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()的

调用函数的代码。

2 个答案:

答案 0 :(得分:3)

Python(以及大多数其他语言)具有“文件指针”的概念 - 它是对文件中某些位置的引用。所有读写都从文件指针开始。例如,如果文件指针位于文件的开头,则调用read()将读取整个文件。如果文件指针被移动,比如前进100个字符,则调用read()将跳过前100个字符。

读取将始终将文件指针提前到它停止读取的点之后。因此,例如,如果您要求它只读取100个字节,则文件指针将前进100个字节,下一个读取将从那里读取。

在您的代码中,is_number接受文件句柄并立即读取文件的全部内容。执行此操作时,文件指针将移动到文件的末尾。循环退出后,再次在最后打开的文件上调用is_number。由于文件指针位于文件的末尾并且尚未移动,因此无需读取任何内容,因此将numList设置为空字符串。

答案 1 :(得分:0)

只是为了添加Bryan的答案,您可以使用seek()文件方法从头重新开始阅读。例如,如果f是文件句柄的名称,f.seek(0)将指向文件的开头。