python中的简单读取文件问题

时间:2014-10-29 15:33:31

标签: python file input io readfile

为什么调用此函数会在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('\r\n')
print file.read().split('\r\n')

numbers = file.read().split("\r\n")
file.close()

return numbers

作为旁注,要获取我需要使用转义序列\ r和\ n分割文件的数字。对于在文件中连续使用这两个转义序列的人有没有任何推理,而不仅仅是\ n? (该文件包含需要以特定方式排列的1000个数字的列表)

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

因为file.read在读取文件时进展。你阅读整个文件,永远不会回来。 (假设缩进实际上没问题。)

Documentation:

  

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

答案 2 :(得分:1)

正在按顺序读取文件,因此第一次调用file.read()从文件的开头读取。第二个调用尝试读取前一个调用完成的位置,即文件的结尾,因此没有内容。

答案 3 :(得分:1)

在处理文件时,使用with块通常会更加pythonic,因为它会自动处理文件:

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('\r\n')

    return numbers