PHP 与Python 读取大文件的区别
php读取大文件的方法
<?php function readFile($file) { # 打开文件 $handle = fopen($file, 'rb'); while (feof($handle) === false) { # 重点 每次读取 1024 个字节 yield fread($handle, 1024); } fclose($handle); } foreach (readFile("./test.zip") as $n => $line) { # 把读取的文件流写成一个新的文件 file_put_contents('copy.zip', $line, FILE_APPEND); }
function getLines($file) { $f = fopen($file, 'r'); try { while ($line = fgets($f)) { yield $line; } } finally { fclose($f); } } foreach (getLines("file.txt") as $n => $line) { // 只取前五行 if ($n > 5) break; # 把读取的文件流写成一个新的文件 file_put_contents('copy.txt', $line, FILE_APPEND); }
python读取大文件的方法
with open(filename,"rb") as f: for fLine in f: pass 这个f 就是迭代器,迭代器也叫做 可迭代对象,迭代器 可以表示全部自然数,可以是无穷大;
你可能会好奇,为毛3行代码就可以解决内存被占用的问题了??? 这就是python的神奇之处;这个f,是一个迭代器,(或者叫做可迭代对象) !
因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。
可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。而且next()出去一条,则该迭代器对象的中的数据便会少一条!