首页 > 后端开发 > php教程 > PHP打开文件有类似Python中“for line in open('file')”的写法吗?

PHP打开文件有类似Python中“for line in open('file')”的写法吗?

WBOY
发布: 2016-06-06 20:45:55
原创
1447 人浏览过

Python中读取文件有非常方便的方式:

<code class="lang-python">for line in open('file'):
    print line
</code>
登录后复制
登录后复制

PHP中类似的写法吗?就像Python这样两行搞定的?

回复内容:

Python中读取文件有非常方便的方式:

<code class="lang-python">for line in open('file'):
    print line
</code>
登录后复制
登录后复制

PHP中类似的写法吗?就像Python这样两行搞定的?

当然也可以啦,请参考file()的示例:

<code>foreach(file('file') as $line)
    echo $line;
</code>
登录后复制

@公子的答案算是标准答案吧
不过假设文件很大,那么其实这种做法存在性能问题,会使PHP更大的内存,文件足够大的时候,导致严重错误

令人欣慰的是,在php 5.5.0版本开始,新的特性 Generator 生成器,绝对是更好的解决方案

<code class="lang-php">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;
    echo $line;
}
</code>
登录后复制

生成器的介绍在这里 Generator

善用generator,节省内存,绝对正途

两行搞不定,最少得四行。

<code class="lang-php">//读文件
$fh = fopen('file', 'r');
//如果指针没在文件末尾继续
while (!feof($fh)) {
    //输出当前行并将指针移动到下一行
    echo fgets($fh) . "\r\n";
}
fclose($fh);
</code>
登录后复制

这四行中,如果文件读取失败,我们可以进行处理,而你的两行想要判断这一点,也需要改回四行。
你懂我的意思、

其实python可以一行就对文件进行 行处理,比如:
array = [int(line.strip()) for line in open('file')]
python3 加入了 with open('file') f.close 可以不用写了。

比行数没意义。这个在PHP里太简单了。

<code>$fp = fopen('file', 'r');
while($line = fgets($fp)) {
    echo $line;
}
</code>
登录后复制
相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板