Python:我正在尝试解压缩文件夹,并且只想将特定文件保存到输出文件夹。我没有得到预期的输出

时间:2018-09-21 08:45:03

标签: python

下面是文件夹结构:

enter image description here

我已经尝试过下面的代码将报告.json保存到输出目录中,并且我想将其重命名为untar文件名,即3884b56e33d16dd68faa4f1f25c28200.json

下面是代码:

import tarfile
import os

outdir=os.mkdir("C:\\Users\\esrilka\\Documents\\Tar Files\\Untar Files3")
t = tarfile.open("C:\\Users\\esrilka\\Documents\\Tar Files\\3884b56e33d16dd68faa4f1f25c28200.tar.gz", 'r')
for member in t.getmembers():
    print(member)
    if "autodiscovery/report" in member.name:

        print("true")
        t.extract(member='autodiscovery\report.json',path='outdir')

print (os.listdir('outdir'))

如何将报告.json保存到输出目录并重命名文件。

1 个答案:

答案 0 :(得分:0)

您应该使用反斜杠转义反斜杠文字:

t.extract(member='autodiscovery\\report.json',path='outdir')

或者您可以使用原始字符串:

t.extract(member=r'autodiscovery\report.json',path='outdir')

但是既然您有这种情况:

if "autodiscovery/report" in member.name:

您应该使用正斜杠代替提取

t.extract(member='autodiscovery/report.json',path='outdir')

此外,os.mkdir不会返回其创建的目录名称,因此您的outdir变量将为None。您应该直接将路径名分配给outdir

outdir="C:\\Users\\esrilka\\Documents\\Tar Files\\Untar Files3"
os.mkdir(outdir)

,然后将其用于os.mkdir和提取(请注意,outdir周围没有引号):

t.extract(member='autodiscovery/report.json',path=outdir)

编辑:既然您提到要提取report.json,而没有tar文件中路径所在的autodiscovery目录,则必须使用extractfile方法而是自己将内容写到所需位置:

with open(os.path.join(outdir, 'report.json'), 'w') as f:
    f.write(t.extractfile('autodiscovery/report.json').read())

如果您想将report.json重命名为tar文件的名称,只需打开其他名称的文件即可:

with open(os.path.join(outdir, '3884b56e33d16dd68faa4f1f25c28200.json'), 'w') as f:

,如果您希望该名称与tar文件相同,请两次使用os.path.splitext来获取它(因为您的扩展名有两个.tar.gz tar文件),因此一开始您应该这样做:

archive = "C:\\Users\\esrilka\\Documents\\Tar Files\\3884b56e33d16dd68faa4f1f25c28200.tar.gz"
basename = os.path.basename(os.path.splitext(os.path.splitext(archive)[0])[0])
t = tarfile.open(archive, 'r')

,然后在打开json文件进行写入时:

with open(os.path.join(outdir, basename + '.json'), 'w') as f: