【发布时间】:2015-01-05 16:52:54
【问题描述】:
我正在尝试读取 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 返回缓冲区(如何将其转换为缓冲区?),非常感谢任何建议。
【问题讨论】:
-
就像错误所说的那样,您传递的是 ExFileObject,而不是像“extractfile”期望的字符串或 TarInfo 对象。