python:解压然后tar

时间:2015-03-16 02:08:52

标签: python tarfile

当我运行以下命令时,我希望infile和outfile是相同的,但它们不在我测试的文件上。尺寸略有不同,tar tvf显示我已经获得了尾随/暂停

我在windows和python 2.7.9上运行

我做错了什么?

import tarfile
import io

fn = 'infile.tar'
outf = 'outfile.tar'

with open(fn, 'rb') as f:
    data = f.read()  # read the rest

tf = tarfile.open(fileobj=io.BytesIO(data))

iofile = io.BytesIO()
out = tarfile.open(fileobj=iofile, mode='w')

for item in tf.getmembers():
    if item.isfile():
        f = tf.extractfile(item)
        contents = f.read()
        out.addfile(item, io.BytesIO(contents))
        print('{}: {}'.format(item.name, len(contents)))
    elif item.isdir():
        t = item
        out.addfile(t)
        print('{}: **isdir**'.format(item.name))
    else:
        print('{}: **unknown**'.format(item.name))
out.close()

contents = iofile.getvalue()
with open(outf, 'wb') as f:
    f.write(contents)

编辑:部分示例: 原始

-rw------- 1000/1000      1214 1969-12-31 19:00 apps/com.antutu.ABenchMark/_manifest
-rw-r--r-- 1000/1000  37044320 2015-03-12 23:40 apps/com.antutu.ABenchMark/a/base.apk
drwxrwx--x 10152/10152       0 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview
drwx------ 10152/10152       0 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview/Cache
-rw------- 10152/10152     844 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview/Cache/213163dd3446f027_0

改变:

-rw------- 1000/1000      1214 1969-12-31 19:00 apps/com.antutu.ABenchMark/_manifest
-rw-r--r-- 1000/1000  37044320 2015-03-12 23:40 apps/com.antutu.ABenchMark/a/base.apk
drwxrwx--x 10152/10152       0 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview/
drwx------ 10152/10152       0 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview/Cache/
-rw------- 10152/10152     844 2015-01-11 10:15 apps/com.antutu.ABenchMark/r/app_webview/Cache/213163dd3446f027_0

我一直在测试Android备份文件,这些文件太大而无法发布。

0 个答案:

没有答案