从tar文件中读取单个bz2文件

时间:2015-01-05 16:52:55

标签: python tar

我试图在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(如何将其转换为缓冲区?),我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

BZ2File期望文件 name 作为第一个参数,并传递文件 object (即具有与Python返回的相同API的对象{ {1}})。

要执行您想要的操作,您必须自己阅读open()中的所有字节并致电t_extract或使用bz2.decompress(data)通过它来传输数据。