我试图在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之间有什么不同?
答案 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)