Python: я не пытаюсь распаковать папку и хотел бы сохранить только определенный файл в папку вывода. Я не получаю ожидаемый вывод

1

Ниже представлена структура папок:

Изображение 174551

Я попробовал приведенный ниже код, чтобы просто сохранить отчет .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
    Вы можете использовать косую черту ( / ) вместо обратной косой черты (`\`). Python это поймет. :)
Теги:

1 ответ

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, поэтому ваша переменная 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)

EDIT: теперь, когда вы упомянули, что хотите извлечь 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:
  • 0
    Я пробовал с косой чертой, но в outdir ничего не сохраняется.
  • 0
    Каковы результаты вашей print(member) ?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню