首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:我不想解压缩文件夹,只想保存特定的文件到输出文件夹,我没有得到预期的输出

Python:我不想解压缩文件夹,只想保存特定的文件到输出文件夹,我没有得到预期的输出
EN

Stack Overflow用户
提问于 2018-09-21 08:45:03
回答 1查看 56关注 0票数 1

以下是文件夹结构:

我尝试了下面的代码来将report.json保存到输出目录中,并且我还想将它重命名为untar文件名,即3884b56e33d16dd68faa4f1f25c28200.json

以下是代码:

代码语言:javascript
复制
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保存到输出目录并重命名文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-21 08:58:51

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

代码语言:javascript
复制
t.extract(member='autodiscovery\\report.json',path='outdir')

也可以使用原始字符串:

代码语言:javascript
复制
t.extract(member=r'autodiscovery\report.json',path='outdir')

但既然你有这个条件:

代码语言:javascript
复制
if "autodiscovery/report" in member.name:

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

代码语言:javascript
复制
t.extract(member='autodiscovery/report.json',path='outdir')

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

代码语言:javascript
复制
outdir="C:\\Users\\esrilka\\Documents\\Tar Files\\Untar Files3"
os.mkdir(outdir)

然后将其用于os.mkdir和提取(注意outdir周围缺少引号):

代码语言:javascript
复制
t.extract(member='autodiscovery/report.json',path=outdir)

编辑:既然您已经提到要提取report.json,而不需要autodiscovery目录(这是tar文件中路径的一部分),那么您必须使用extractfile方法,并自己将内容写入所需的位置:

代码语言:javascript
复制
with open(os.path.join(outdir, 'report.json'), 'w') as f:
    f.write(t.extractfile('autodiscovery/report.json').read())

如果要将report.json重命名为tar文件的名称,只需打开文件的不同名称:

代码语言:javascript
复制
with open(os.path.join(outdir, '3884b56e33d16dd68faa4f1f25c28200.json'), 'w') as f:

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

代码语言:javascript
复制
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文件进行写作时:

代码语言:javascript
复制
with open(os.path.join(outdir, basename + '.json'), 'w') as f:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52439911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档