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



  • 相关阅读:
    Birt报表存储过程多选参数的设置
    jQuery UI AutoComplete的使用
    关于事件的简单优化
    Java编程思想(Chapter2、4、6)
    CSS层模型
    [转]Java并发编程:Lock
    Java多线程synchronized同步
    关于Thread.currentThread()和this的差异
    关于JavaScript闭包的小问题
    ReactiveCocoa(二)
  • 原文地址:https://www.cnblogs.com/rianley/p/12093014.html
Copyright © 2011-2022 走看看