我正在阅读一本针对初学者的python教程,作者在某些地方定义了一些处理文件的方法。我的疑问与内存管理和文件数组有关。
#open a file for reading
file = open(filename, 'r')
#this turns the file into an array.
lines = file.readlines() `
Python是否足够智能来检查文件大小?如果文件有大约1gb的数据,会发生什么?Python会把整个文件扔到内存(数组)?或者这是一个惰性操作,就像C/c++一样!
引用Python教程:
要读取文件的内容,调用
f.read(size)
,它读取一定数量的数据并将其作为字符串返回。size
是一个可选的数字参数。当size被省略或为负值时,将读取并返回文件的整个内容;如果文件是机器内存的两倍大,那就是你的问题了。否则,最多读取并返回size字节。如果到达文件末尾,f.read()
将返回一个空字符串(""
)。
它也适用于readlines()
,所以Python会将整个文件"抛出"到内存中。
同样,通过引用Python文档:
file.readlines([sizehint]):
使用readline()读取直到EOF,并返回包含由此读取的行列表. ...
Python is smart enough to check the file size?
是的。有一些操作系统相关的功能。您可以使用它们来获取文件大小。
What happens if the file has about 1 GB of data?
Python will throw the entire file to the memory (array)?
Or this is a lazy operation, just like C/C++ does!
如果您使用fp.readlines
,是的,1GB的数据将存储在内存中。但不出所料,有一个这样的函数,增加文件指针像C/c++。所以你可以一块一块地读取数据,减少内存的使用。
fp.read(n)
我想你说的是C/c++类文件操作