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