I am trying to extract a zipped folder but instead of directly using .extractall()
, I want to extract the file into stream so that I can handle the stream myself. Is it possible to do it using tarfile
? Or is there any suggestions?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can obtain each file from a tar file as a python file
object using the .extractfile()
method. Loop over the tarfile.TarFile()
instance to list all entries:
import tarfile with tarfile.open(path) as tf: for entry in tf: # list each entry one by one fileobj = tf.extractfile(entry) # fileobj is now an open file object. Use `.read()` to get the data. # alternatively, loop over `fileobj` to read it line by line.
回答2:
I was unable to extractfile
while network streaming a tar file, I did something like this instead:
from backports.lzma import LZMAFile import tarfile some_streamed_tar = LZMAFile(requests.get('http://some.com/some.tar.xz').content) with tarfile.open(fileobj=some_streamed_tar) as tf: tarfileobj.extractall(path="/tmp", members=None)
And to read them:
for fn in os.listdir("/tmp"): with open(os.path.join(t, fn)) as f: print(f.read())
python 2.7.13