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



  • 相关阅读:
    winform中文本框添加拖拽功能
    jQuery返回顶部代码
    判断IP地址是否在指定范围内的方法
    jQuery提示通知插件jBox
    Windows 8.1 SecureBoot未正确配置的解决方法
    操作系统下载
    js中(function(){…})()立即执行函数写法理解
    。net MVC 序列化 反序列化
    js点击button按钮跳转到页面代码
    单例模式
  • 原文地址:https://www.cnblogs.com/rianley/p/12093014.html
Copyright © 2011-2022 走看看