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