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

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

WBOY
WBOYOriginal
2016-06-06 20:45:551441browse

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>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn