我试图在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(如何将其转换为缓冲区?),我们非常感谢任何建议。
答案 0 :(得分:2)
BZ2File
期望文件 name 作为第一个参数,并传递文件 object (即具有与Python返回的相同API的对象{ {1}})。
要执行您想要的操作,您必须自己阅读open()
中的所有字节并致电t_extract
或使用bz2.decompress(data)
通过它来传输数据。