如何读取通过追加行不断更新的文件?

Rak*_*van 2 python json curl file

在我的终端中我正在运行:

curl --user dhelm:12345 \https://stream.twitter.com/1.1/statuses/sample.json > raw-data.txt
Run Code Online (Sandbox Code Playgroud)

curl 的输出是实时流式 Twitter 数据,该数据正在写入文件 raw-data.txt

在Python中,

 import json
 posts = []

 for line in open("/Users/me/raw-data.txt"):
    try:
        posts.append(json.loads(line))
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

我正在 python 中读取文件并使用 json 解码器并将结果附加到帖子中。

现在,问题是我不希望我的程序在 python 脚本到达文件末尾时结束。相反,当我的终端上运行的curl 将更多帖子附加到文件raw-data.txt 时,我想继续阅读。

aba*_*ert 5

我认为这是一个XY问题。因为您无法想出一种方法来从 Python 中逐行传输 HTTP 请求,所以您决定使用curl流式下载到文件,然后从 Python 中读取该文件。因为您这样做了,所以您必须处理在请求仍在进行时遇到 EOF 的可能性,仅仅因为您已经赶上了curl. 所以你无缘无故地让自己变得更加困难。

虽然可以使用 stdlib 来完成流式下载,但这有点痛苦;图书馆requests让事情变得容易多了。那么,让我们使用它:

import json
import requests
from requests.auth import HTTPBasicAuth

posts = []
url = 'https://stream.twitter.com/1.1/statuses/sample.json'
r = requests.get(url, auth=('dhelm', '12345'), stream=True)
for line in r.iter_lines():
    try:
        posts.append(json.loads(line))
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

这就是整个计划。