search

Home  >  Q&A  >  body text

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

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

for line in open('file'):
    print line

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

PHP中文网PHP中文网2902 days ago357

reply all(5)I'll reply

  • 迷茫

    迷茫2017-04-10 14:48:47

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

    foreach(file('file') as $line)
        echo $line;
    

    reply
    0
  • PHPz

    PHPz2017-04-10 14:48:47

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

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

    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;
    }
    

    生成器的介绍在这里 Generator

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

    reply
    0
  • PHPz

    PHPz2017-04-10 14:48:47

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

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

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:48:47

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

    reply
    0
  • PHPz

    PHPz2017-04-10 14:48:47

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

    $fp = fopen('file', 'r');
    while($line = fgets($fp)) {
        echo $line;
    }
    

    reply
    0
  • Cancelreply