簡體   English   中英

從tar文件讀取單個bz2文件

[英]Reading individual bz2 files from a tar file

我正在嘗試讀取tar文件中的許多bz2文件,該文件具有以下結構:

2013-01.tar
  01\01\00\X.json.bz2\X.json
  01\01\02\X.json.bz2\X.json

我可以按以下方式獲取文件名:

import tarfile
tar = tarfile.open(filepath, 'r')
tar_members_names = [filename for filename in tar.getnames()]
# Side question: How would I only return files and no directories?

它返回.bz2文件的列表。 現在,我嘗試使用以下方法(臨時)提取它們:

inner_filename = tar_members_names[0]
t_extract = tar.extractfile(inner_filename)

但是,以下提取json文件的代碼返回錯誤。 我將如何逐行檢索JSON文件?

import bz2
txt = bz2.BZ2File(t_extract)
TypeError: coercing to Unicode: need string or buffer, ExFileObject found
txt = bz2.decompress(t_extract)
TypeError: must be convertible to a buffer, not ExFileObject

我一直無法弄清楚如何從tar文件而不是當前的ExFileObject返回緩沖區(如何將其轉換為緩沖區?),任何建議都將不勝感激。

BZ2File期望將文件作為第一個參數,並且您傳遞一個文件對象 (即,具有與Python返回的open()相同的API的對象)。

要執行所需的操作,您必須自己從t_extract讀取所有字節,然后調用bz2.decompress(data)或使用BZ2Decompressor通過它流式傳輸數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM