为什么调用此函数会在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个数字的列表)
答案 0 :(得分:3)
当您打开文件时,您将获得一个记住其在文件中当前位置的对象。因此,当您执行f.read()
时,即表示结束:对read()
的后续调用不会返回任何内容,因为没有更多内容。
您可以通过执行f.seek(0)
或重新打开文件来重置您的位置。
答案 1 :(得分:1)
因为file.read
在读取文件时进展。你阅读整个文件,永远不会回来。 (假设缩进实际上没问题。)
要读取文件的内容,请调用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