Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逐行读取文件还是使用Read()方法?_Python_File - Fatal编程技术网

Python 逐行读取文件还是使用Read()方法?

Python 逐行读取文件还是使用Read()方法?,python,file,Python,File,中建议最好使用: for line in f: print line 比: 其中f是一个文件对象 虽然我可以看出这不是本文中的比较试图证明的要点(这是关于上下文管理器的),但我想知道这两种方法之间的区别是什么 即使我只需要整个文件内容,还是使用前一种方法好,而不是在每一行上都进行任何类型或处理吗?read()将文件加载到内存中,如果它不是一个大文件,这不会是一个问题。 如果适合一个大文件(比如GB),加载时可能会耗尽内存。所以对于大文件循环,使用file对象更好。它不会让你的内存耗尽,也

中建议最好使用:

for line in f:
   print line
比:

其中
f
是一个文件对象

虽然我可以看出这不是本文中的比较试图证明的要点(这是关于上下文管理器的),但我想知道这两种方法之间的区别是什么

即使我只需要整个文件内容,还是使用前一种方法好,而不是在每一行上都进行任何类型或处理吗?

read()
将文件加载到内存中,如果它不是一个大文件,这不会是一个问题。
如果适合一个大文件(比如GB),加载时可能会耗尽内存。所以对于大文件循环,使用file对象更好。它不会让你的内存耗尽,也不会让你的电脑变慢

read()
会将文件加载到内存中,如果它不是大文件,这不会是一个问题。

如果适合一个大文件(比如GB),加载时可能会耗尽内存。所以对于大文件循环,使用file对象更好。它不会让你的内存耗尽,也不会让你的电脑变慢。这与内存管理有关

如果您正在处理的文件很大(MB甚至GB大小),那么使用
read
方法效率非常低,因为它一次读入文件的所有内容并将其存储为字符串对象。从:

file.read([size])

从文件中最多读取
size
字节(如果读取在获取
size
字节之前达到EOF,则读取的字节数会减少)。如果
size
参数为负数或省略,则读取所有数据,直到达到EOF

我的。你可以猜到,这不是一件好事。即使您设法避免了
内存错误
,您仍然会消耗大量可用内存,从而极大地影响程序的性能

然而,for-loop方法通过一次只处理一行来消除这个问题。像迭代器一样,对文件对象进行迭代会产生一行一行的结果。从:

文件对象是它自己的迭代器,例如
iter(f)
返回
f
(除非
f
关闭)。当文件用作迭代器时,通常在 for循环(例如,f:print line.strip()中的行的
next()
方法被重复调用。此方法返回下一个输入 行,或在命中EOF时引发
StopIteration

因此,您不必担心过多的内存消耗,因为在任何给定时间内存中都只有一行


然而,如果文件很小,那么使用
读取
方法是非常好的,因为对内存的影响可以忽略不计。事实上,对于小文件,一次拥有所有数据是很方便的,这样您就可以将其作为一个整体使用(对其调用字符串方法,例如
str.count
str.find
,将其分割为单独的部分等)。

这与内存管理有关

如果您正在处理的文件很大(MB甚至GB大小),那么使用
read
方法效率非常低,因为它一次读入文件的所有内容并将其存储为字符串对象。从:

file.read([size])

从文件中最多读取
size
字节(如果读取在获取
size
字节之前达到EOF,则读取的字节数会减少)。如果
size
参数为负数或省略,则读取所有数据,直到达到EOF

我的。你可以猜到,这不是一件好事。即使您设法避免了
内存错误
,您仍然会消耗大量可用内存,从而极大地影响程序的性能

然而,for-loop方法通过一次只处理一行来消除这个问题。像迭代器一样,对文件对象进行迭代会产生一行一行的结果。从:

文件对象是它自己的迭代器,例如
iter(f)
返回
f
(除非
f
关闭)。当文件用作迭代器时,通常在 for循环(例如,f:print line.strip()
中的行的
next()
方法被重复调用。此方法返回下一个输入 行,或在命中EOF时引发
StopIteration

因此,您不必担心过多的内存消耗,因为在任何给定时间内存中都只有一行


然而,如果文件很小,那么使用
读取
方法是非常好的,因为对内存的影响可以忽略不计。事实上,对于小文件,一次拥有所有数据是很方便的,这样您就可以将其作为一个整体使用(对其调用字符串方法,例如
str.count
str.find
,将其分割为单独的部分,等等).

区别在于您一次在内存中存储了多少文件内容。区别在于您一次在内存中存储了多少文件内容。
a = f.read()
print a