下面是文件夹结构:
我已经尝试过下面的代码将报告.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
保存到输出目录并重命名文件。
答案 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: