Чтобы переименовать один файл в ZipFile, что я скачиванием, я следующее:Переименование ZipFile в Python
for item in zipfile.infolist():
old_name = item.filename
match = re.search(r'(.*)(.mdb)', item.filename)
item.filename = "%s_friend%s" % (match.group(1),, match.group(2)) # I should probably be using replace here
zipfile.extract(old_name, save_dir)
Однако, когда я хочу, чтобы извлечь этот файл и сохранить его в определенный каталог, я необходимо ссылаться на «old_name» и не может ссылаться на новое. Есть ли «чистый» способ как для извлечения переименованного файла? Или это более pythonic, чтобы сначала извлечь, а затем переименовать файл?
Как и OP this SO question, я сталкиваюсь с той же ошибкой при ссылке на переименованный файл.
обновлено: Это неправильное обновление первого файла. Хотя кажется, что он правильно переименовал файл, он выводит изначально именованный файл.
for item in zipfile.infolist():
old_name = item.filename
match = re.search(r'(.*)(.mdb)', item.filename)
print match.group(1), match.group(2)
item.filename = "%s_%s%s" % (match.group(1), year, match.group(2))
print item.filename
zipfile.close()
with ZipFile(curr_zip, 'r') as zpf:
for item in zpf.infolist():
zpf.extract(item.filename, save_dir)
Вы хотите извлечь, как вы собираетесь через каждый пункт? Или это было бы хорошо вне цикла for, в другом для цикла? Если последний, не извлекайте в том же цикле, вы переименовываете файл. Вместо этого закройте zipfile с помощью zipfile.close() и снова откройте его, а затем извлеките файлы –