У меня есть набор архивных файлов - как в zip, так и в rar форматах - внутри которых мне нужно переименовать некоторые файлы. В частности, я хочу сделать что-то вроде этого:

for each archive file in a directory
    for each file in the archive
        if the file name matches the regular expression /(.* - [0-9]{2})([0-9]{2} - .)*/
            rename the file as \1-\2

Хитрость не столько в создании нового имени; Я могу сделать это с помощью bash sed или чего-либо еще. Это набор команд для работы с файлами в архивах с использованием rar/unrar или unzip/zip

(Если это имеет значение, я переформатирую некоторые файлы CBR/CBZ, чтобы получить развороты двухстраничных страниц в SimpleComic в правильном порядке - он интерпретирует страницу 0203 как страницу 203, что делает историю немного тяжело следовать)

4 ответа4

2

Я смотрю на твой пример и вижу КОД ПИТОНА :)

На самом деле я думаю, что это должен быть путь. Я знаю, что это не переполнение стека ... но это единственный способ увидеть вашу проблему решенной.

Пример кода для извлечения всех файлов:

import zipfile

a = zipfile.ZipFile("C:\\x.zip", 'r')
for i in a.namelist():         #Extract every file from it
     b = open("C:\\"+i, 'wb')
     b.write(a.read(i))
     #HERE YOU INSERT WHAT YOU WANT TO DO TO EACH FILE (b is the last file)
     b.close()
a.close()

Надеюсь это поможет

На этой странице рассказывается, как установить unrar для командной строки для MAC.

Таким образом, вы можете сделать сценарий для отмены регистрации и сценарий для проверки ваших файлов, а затем вызывать их из python и заставлять python изменять имена.

Для выполнения внешнего скрипта используйте:

import os;
os.system("path/scritname");
1

Я думаю, что самый простой способ сделать это - распаковать каждый архив, выполнить операцию переименования, а затем перепаковать его.

В Linux я мог использовать файловую систему FUSE, чтобы иметь прозрачно распакованные архивы, с которыми я мог работать как обычные папки, используя пакетный скрипт для всего переименования. Я не знаю, существует ли эта конкретная файловая система FUSE для Mac.

0

У rar есть ключ командной строки для переименования файлов в архиве:

rar rn archive.rar filename newfilename

однако используемая вами утилита zip этого не делает. Вам нужно будет извлечь, переименовать и повторно сжать, как сказал Райан. Для Mac существуют другие утилиты zip, которые, вероятно, имеют такую возможность. Я знаю, что 7-zip поддерживает переименование в архивах начиная с 2.30 beta 25, хотя я не проверял, поддерживают ли они это из командной строки. 7-zip довольно обширный, когда дело доходит до параметров командной строки, поэтому я предполагаю, что это возможно.

0

Я тоже изучал это, и я подозреваю, что проще всего, вероятно, написать скрипт Python для этого, особенно потому, что вы будете иметь дело как с файлами RAR, так и с файлами ZIP.

Похоже, что нет особо чистого способа переименования файла в zip-архиве без разархивирования всех файлов, переименования файлов, которые вы хотите переименовать, и последующего архивирования их обратно, что на самом деле не идеально. Тем не менее, я наткнулся на утилиту OS/X под названием zipnote которая делает это:

страница руководства zipnote

Он не выглядит ужасно простым в использовании, но, возможно, стоит посмотреть, и если предположить, что он не разархивирует сами файлы, его довольно легко автоматизировать. Между тем, утилита командной строки OS/X rar поддерживает переименование файлов в архивах RAR через rar rn foobar.rar oldname newname .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .