gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:47 25 4
gpt4 key购买 nike

下面是文件夹结构:

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保存到输出目录并重命名该文件。

最佳答案

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

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.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:

关于Python:我不想解压文件夹,只想将特定文件保存到输出文件夹。我没有得到预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52439911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com