Переименовать файлы при распаковке zip архива
В zip архиве имеются файлы xml и pdf, мне нужно распаковать pdf с другим именем файла, к примеру: было наименование - "report-c123ba65-b3fb-4e61-b160-18a17e351f12-OfSite-2023-03-23-868902-52-01[0] ЭП.pdf", а нужно положить в папку с уже переименованным в - "52_18_0020026_1108 ЭП.pdf".
Помогите пожалуйста.
Новое наименование берется из xml файла:
with archive.open([_ for _ in archive.namelist() if _.endswith(find_xml)][0]) as line: # Находим все xml в архиве
soup = BeautifulSoup(line.read(), features="xml")
cad_n = '_'.join((soup.select_one('object common_data cad_number').text).split(':'))
print(cad_n)
Вот мой полный код:
import zipfile
from bs4 import BeautifulSoup
from pathlib import Path
import os
find_xml = '.xml'
find_pdf = 'ЭП.pdf'
for path in Path(r'C:\Users\shirshov\Downloads').rglob('*.zip'):
with zipfile.ZipFile(path, mode="r") as archive:
with archive.open([_ for _ in archive.namelist() if _.endswith(find_xml)][0]) as line: # Находим все xml в архиве
soup = BeautifulSoup(line.read(), features="xml")
cad_n = '_'.join((soup.select_one('object common_data cad_number').text).split(':'))
print(cad_n)
archive.extract(([_ for _ in archive.namelist() if _.endswith(find_pdf)][0]), path=r'C:\Users\shirshov\Downloads\PDF')
# for pdf_ in ([_ for _ in archive.namelist() if _.endswith(find_pdf)][0]):
# os.rename(file + pdf_, cad_n +'_'+ find_pdf)
Ответы (1 шт):
Автор решения: Михаил Ширшов
→ Ссылка
Получилось это сделать, вот таким способом:
import zipfile
from bs4 import BeautifulSoup
from pathlib import Path
import os
import shutil
find_xml = '.xml'
find_pdf = 'ЭП.pdf'
for path in Path(r'C:\Users\shirshov\Downloads').rglob('*.zip'):
with zipfile.ZipFile(path, mode="r") as archive:
with archive.open([_ for _ in archive.namelist() if _.endswith(find_xml)][0]) as line: # Находим все xml в архиве
soup = BeautifulSoup(line.read(), features="xml")
cad_n = '_'.join((soup.select_one('object common_data cad_number').text).split(':'))
file_newname = cad_n + '_' + find_pdf
archive.extract(([_ for _ in archive.namelist() if _.endswith(find_pdf)][0]), path=r'C:\Users\shirshov\Downloads\PDF')
file_oldname = os.path.join(r'C:\Users\shirshov\Downloads\PDF', ([_ for _ in archive.namelist() if _.endswith(find_pdf)][0]))
file_newname_newfile = os.path.join(r'C:\Users\shirshov\Downloads\PDF', file_newname)
newFileName=shutil.move(file_oldname, file_newname_newfile)