Modern PHP 使用生成器yield 处理csv文件 Generator
* 使用生成器处理csv文件
<?php
function getRows($file) {
$handle = fopen($file, 'rb');
if ($handle === false) {
throw new Exception('open file '.$file.' error');
}
while (feof($handle) === false) {
yield fgetcsv($handle);
}
fclose($handle);
} // 只会为csv文件中的一行分配内存
// 不需要把整个csv文件都读取到内存
$generator = getRows('../data/t_video.csv'); // foreach ($it as $row) {print_r($row);}
while ($generator->valid()) {
print_r($generator->current());
$generator->next();
}
$generator->rewind(); // http://php.net/manual/en/class.generator.php
input: ../data/t_video.csv
"9","其他","ULTIMATE PHOTO GUIDE",NULL,"http://118.190.209.209/media/mp4/1.mp4","http://118.190.209.209/media/png/1.png","ULTIMATE PHOTO GUIDE"
"10","其他","THE VERGE",NULL,"http://118.190.209.209/media/mp4/2.mp4","http://118.190.209.209/media/png/2.the_verge.png","THE VERGE"
"11","其他","Microsoft Power BI",NULL,"http://118.190.209.209/media/mp4/3.mp4","http://118.190.209.209/media/png/3.png","Microsoft Power BI"
output:
Array
(
[0] => 29
[1] => 龙都教育
[2] => 龙都教育_第3期
[3] => NULL
[4] => http://118.190.209.209/media/mp4/%E9%BE%99%E9%83%BD%E6%95%99%E8%82%B21103VA0.mp4
[5] => http://118.190.209.209/media/poster/puyang_longdu_edu_1103.jpg
[6] => 龙都教育第3期20171103 濮阳市第一实验小学学生 范子恒
)
Array
(
[0] => 30
[1] => 课程
[2] => 青春的情绪-濮阳范县-刘艳艳
[3] => NULL
[4] => http://118.190.209.209/media/mp4/puyang/%E5%88%98%E8%89%B3%E8%89%B31_2017_6_12_17_6_32_2f45_0.mp4
[5] => http://118.190.209.209/media/poster/puyang/puyang01_liuyanyan_youth_emotion.jpg
[6] => 青春的情绪. 做游戏:抓手指
)
Generator implements Iterator {
/* Methods */
public mixed current ( void )
public mixed getReturn ( void )
public mixed key ( void )
public void next ( void )
public void rewind ( void )
public mixed send ( mixed $value )
public mixed throw ( Throwable $exception )
public bool valid ( void )
public void __wakeup ( void )
}
}
Modern PHP 使用生成器yield 处理csv文件 Generator的更多相关文章
- Python文件(File)及读写操作及生成器yield
open函数在内存中创建缓存区,将磁盘上的内容复制到此处.文件内容读入到文件对象缓冲区后,文件对象将缓冲区视为非常大的列表,其中每个元素都有一个索引.文件对象按字节(大约每个字符)来对文件对象缓冲区索 ...
- PHP性能优化利器:生成器 yield理解
如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...
- PHP 生成器 yield理解
如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...
- Python与CSV文件(CSV模块)
Python与CSV文件(CSV模块) 1.CSV文件 CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式.没有“CSV标准”,因此格式由许多读写的应用程序在操作上定义.缺乏标准意味 ...
- Python入门之迭代器/生成器/yield的表达方式/面向过程编程
本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...
- Django学习笔记之视图高级-CSV文件生成
生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...
- 使用Ruby处理大型CSV文件
处理大型文件是一种内存密集型操作,可能导致服务器耗尽RAM内存并交换到磁盘.让我们看一下使用Ruby处理CSV文件的几种方法,并测量内存消耗和速度性能. Prepare CSV data sample ...
- 将文件夹下的所有csv文件存入数据库
# 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...
- python读取两个csv文件数据,进行查找匹配出现次数
现有需求 表1 表2 需要拿表1中的编码去表2中的门票编码列匹配,统计出现的次数,由于表2编码列是区域间,而且列不是固定的,代码如下 #encoding:utf-8 ##导入两个CSV进行比对 imp ...
随机推荐
- 带你梳理Jetty自定义ProxyServlet实现反向代理服务
摘要:最近要做一个将K8s中的某组件UI通过反向代理映射到自定义规则的链接地址上,提供给用户访问的需求.所以顺便研究了一下Jetty的ProxyServlet. 本文分享自华为云社区<Jetty ...
- Python实现发送邮件(实现单发/群发邮件验证码)
Python smtplib 教程展示了如何使用 smtplib 模块在 Python 中发送电子邮件. 要发送电子邮件,我们使用 Python 开发服务器,Mailtrap 在线服务和共享的网络托管 ...
- Vmware15的安装以及Ubunt的在虚拟机上的安装
一.vmware15安装 1.百度网盘地址 链接:https://pan.baidu.com/s/1Lgez57n50QEW97HNdYZCfQ 提取码:9wvy 2.下载到本地后 3.双击安装程序 ...
- ATM取款机优化需求的用例设计
案例设计需求 有一个ATM取款系统,现对于取款功能进行了如何需求变更:碑只能取面额是100元(如取500,输出5张100元),现在功能修改为,可以取面额是10元.50元和100元的,其余功能不变,用户 ...
- c++制表符
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 //制表符是8个字符,当在一个制表符开始的位置(明白什么位置是 ...
- ubuntu下安装teamiewer
下载地址: https://download.teamviewer.com/download/linux/teamviewer_amd64.deb 如果无法下载,则在https://www.teamv ...
- Ubuntu18.04 + NVidia显卡 + Anaconda3 + Tensorflow-GPU 安装、配置、测试 (无需手动安装CUDA)
其中其决定作用的是这篇文章 https://www.pugetsystems.com/labs/hpc/Install-TensorFlow-with-GPU-Support-the-Easy-Wa ...
- 三.Go微服务--令牌桶实现原理
1. 前言 在上一篇文章 Go微服务: 令牌桶 当中简单的介绍了令牌桶实现的原理,然后利用 /x/time/rate 这个库 10 行代码写了一个基于 ip 的 gin 限流中间件,那这个功能是怎么实 ...
- IKEv1协商安全联盟的过程
IKEv1协商安全联盟的过程 采用IKEv1协商安全联盟主要分为两个阶段: 第一阶段,通信双方协商和建立IKE协议本身使用的安全通道,即建立一个IKE SA: 第二阶段,利用第一阶段已通过认证和安全保 ...
- epoll代码框架
epoll代码实现框架: #define MAX_EVENTS 10 struct epoll_event ev, events[MAX_EVENTS]; int listen_sock, conn_ ...