我已经在Python 3.7中使用核心io
库编写了文本文件解析器,它是抽象的。这是其中一部分代码:
import io
class Parser:
def parse(self,input: io.TextIOBase):
for line in iter(input.readline,''):
# do some parsing logic
...
当我将本地文件流传递给它时,它工作正常:
parser = Parser()
result = parser.parse(open('somefile.txt','rt',encoding='utf8'))
但是我还需要解析器来处理HTTP中的文件。文件可能足够大,所以我不想完全在内存中读取它们。我试图利用Requests Python库的流模式,但没有成功。这是我想要做的:
file_response = requests.get(download_url,params=None,allow_redirects=True,stream=True)
file_response.raw.decode_content = True
parser = Parser()
result = parser.parse(io.TextIOWrapper(io.BufferedReader(file_response.raw),encoding='utf8'))
此代码在读取第一行后产生错误ValueError: I/O operation on closed file.
。
有什么解决方法吗?