python中的简单读取文件问题



为什么调用此函数会在python:中产生此输出

['54044', '14108', '79294', '29649']
['']
['']

函数以这种方式调用:

print read_file(FILENAME)

功能代码:

def read_file(filename):
"""
Reads in the file and returns a unsorted list of all the numbers in the file.
"""
file = open(filename)
# Why don't these 2 do the same thing?
print file.read().split('rn')
print file.read().split('rn')
numbers = file.read().split("rn")
file.close()
return numbers

附带说明一下,为了获得数字,我需要使用转义序列\r\n和n来拆分文件。对于在文件中连续使用这两个转义序列的人,而不是仅仅使用\n,有什么理由吗?(该文件有一个需要以特定方式排列的1000个数字的列表)

当您打开一个文件时,您会得到一个记得其在文件中当前位置的对象。因此,当您执行f.read()时,您到达了终点:对read()的后续调用将不会返回任何内容,因为没有更多内容。

您可以通过执行f.seek(0)或重新打开文件来重置您的位置。

因为file.read在读取文件时进行。你读了整个文件,再也回不来了。(假设压痕实际上是好的。)

文件:

要读取文件的内容,请调用f.read(size),它读取一定数量的数据并将其作为字符串返回。size是一个可选的数字参数当大小被忽略或为负数时,将读取并返回文件的全部内容如果文件的大小是机器内存的两倍,那就是您的问题了。否则,最多读取并返回大小为的字节如果已经到达文件的末尾,则f.read()将返回一个空字符串(")

文件是按顺序读取的,因此对file.read()的第一个调用从文件的开头开始读取。第二个调用尝试从上一个调用完成的位置读取,即文件的末尾,因此没有内容。

在处理文件时,使用with块处理自动关闭文件通常更像Python:

def read_file(filename):
    """
    Reads in the file and returns a unsorted list of all the numbers in the file.
    """
    with open(filename, "r") as f:
        numbers = f.read().split('rn')
    return numbers

最新更新