以下是文件夹结构:

我尝试了下面的代码来将report.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保存到输出目录并重命名文件。
发布于 2018-09-21 08:58:51
您应该用反斜杠转义反斜杠文字:
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,而不需要autodiscovery目录(这是tar文件中路径的一部分),那么您必须使用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文件有两个扩展名.tar和.gz ),所以在开始时您应该这样做:
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:https://stackoverflow.com/questions/52439911
复制相似问题