亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:從標準輸入讀取 gzip

Python:從標準輸入讀取 gzip

慕婉清6462132 2021-08-14 16:53:34
如何從標準輸入中逐行讀取壓縮內容?我a.gz在當前目錄中有一個包含 UTF-8 內容的 gzip 文件。場景一:使用gzip.open(filename)作品。我可以打印解壓縮的線條。with gzip.open('a.gz', 'rt') as f:    for line in f:        print(line)# python3 my_script.py場景2:我想從標準輸入讀取 gzip 壓縮的內容。所以我cat將 gzip 壓縮文件作為以下腳本的輸入。with gzip.open(sys.stdin, mode='rt') as f:    for line in f:        print(line)# cat a.gz | python3 script.py但是對于方法 2,我收到以下錯誤:Traceback (most recent call last):  File "script.py", line 71, in <module>    for line in f:  File "....../python3.6/gzip.py", line 289, in read1    return self._buffer.read1(size)  File "....../python3.6/_compression.py", line 68, in readinto    data = self.read(len(byte_view))  File "....../python3.6/gzip.py", line 463, in read    if not self._read_gzip_header():  File "....../python3.6/gzip.py", line 406, in _read_gzip_header    magic = self._fp.read(2)  File "....../python3.6/gzip.py", line 91, in read    self.file.read(size-self._length+read)  File "....../python3.6/codecs.py", line 321, in decode    (result, consumed) = self._buffer_decode(data, self.errors, final)UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

您想打開sys.stdin.buffer,而不是sys.stdin,因為后者透明地將字節解碼為字符串。這對我有用:


with gzip.open(sys.stdin.buffer, mode='rt') as f:

    for line in f:

        print(line)


查看完整回答
反對 回復 2021-08-14
  • 1 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號