zoukankan      html  css  js  c++  java
  • 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()出去一条,则该迭代器对象的中的数据便会少一条!



  • 相关阅读:
    《超越自己》--刘墉
    《菊与刀》--[美]鲁思·本尼迪克特(Ruth Benedict)
    《暧昧的日本人》--李兆忠
    《女性的选择》--[日]今野由梨
    《懂得低头,才能出头》--李艳
    原来还有这样的记词方法_Java版记不规则动词_博主推荐
    《永不止步》--[奥]力克胡哲
    C#面向服务WebService从入门到精通
    C# Windows服务开发从入门到精通
    sql server递归查询
  • 原文地址:https://www.cnblogs.com/rianley/p/12093014.html
Copyright © 2011-2022 走看看