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()出去一条,则该迭代器对象的中的数据便会少一条!



<?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()出去一条,则该迭代器对象的中的数据便会少一条!



猜你喜欢

转载自www.cnblogs.com/rianley/p/12093014.html