2017-04-03 53 views
1

我有一個tarfile對象,裏面有幾個文件,其中一個叫做ffb.json。我嘗試以下,以提取JSON字符串,如何將tar文件對象轉換爲字符串

with tarfile.open(mode="r:gz", fileobj=StringIO.StringIO(p.results)) as tar: 
    for tarinfo in tar: 
     print tarinfo.name 
     if tarinfo.name == './ffb.json': 
      print tarinfo.tobuf() 

然而,print tarinfo.tobuf()不打印我所期待的:./ffb.json0000644000000000000000000000054313070524150012600 0ustar rootroot00000000000000

如果我提取用手ffb.json,它確實有合法的JSON字符串在裏面。

回答

1

正如documentation的tar文件指出,TarInfo只包含文件元數據 - 「它確實包含文件的數據本身。」

幸運的是,您可以將該對象TarInfo傳回TarFile.extractfile(member),以便將文件內容作爲類文件對象(隨後可以通過.read()獲取原始內容)獲取。例如:print tar.extractfile(tarinfo).read()

或者,你可以跳過foreach循環,直接調用TarFile.extractfile(member)與文件名(例如print tar.extractfile("./ffb.json").read())。