在Python 3和Python 2中阅读更改文件

时间:2016-11-01 16:47:27

标签: python file

我试图在Python中读取一个更改的文件,脚本可以处理新添加的行。我有下面的脚本打印出文件中的行,但不会终止。

with open('tmp.txt','r') as f:
    while True:
        for line in f:
            print(line.replace('\n',''))

'tmp.txt'由某些行组成,例如:

a
d
2
3

如果我附加到'tmp.txt'文件,例如使用:

echo "hi" >> tmp.txt

如果脚本是使用Python 3运行的,脚本将打印出新行,但不会使用Python 2。如果Python 2中有相应的内容吗?在这种情况下,两个版本的Python之间有什么不同?

2 个答案:

答案 0 :(得分:5)

在python 2.7 vs 3.5中查看对象f,它们略有不同

以下

with open('tmp.txt','r') as f:
    print(f)
    print(type(f))

在python 2.7中返回

<open file 'tmp.txt', mode 'r' at 0x0000000003DD9780>
<type 'file'>

而在python 3.5中返回

<_io.TextIOWrapper name='tmp.txt' mode='r' encoding='cp1252'>
<class '_io.TextIOWrapper'>

使用

在python 2.7中可以获得相同的行为
import io

with io.open('tmp.txt','r') as f:
    while True:
        for line in f:
            print(line.replace('\n',''))

答案 1 :(得分:1)

这应该可以解决问题。

import time

def follow(file):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

if __name__ == '__main__':
    logfile = open("log.txt","r")
    loglines = follow(logfile)
    for line in loglines:
        print(line)

在此处找到原件:Reading from a frequently updated file