python: редактировать ISO-файл напрямую

#python #file #file-format #iso

#python #файл #формат файла #iso

Вопрос:

  1. Возможно ли взять ISO-файл и отредактировать файл в нем напрямую, т. Е. не распаковывая его, не изменяя файл и не переупаковывая его?
  2. Это можно сделать 1. из Python? Как бы я это сделал?

Комментарии:

1. черт возьми, как это уже стало лучшим хитом Google для «python edit iso» (52 минуты спустя)?

2. Google просто действительно это нравится! С другой стороны, я не думаю, что возможно изменить ISO-образ на месте из-за структуры файловой системы ISO. Однако я могу быть совершенно неправ. В любом случае, вы изучали привязки libcdio к python? pypi.python.org/pypi/pycdio Я не думаю, что libcdio может делать то, что вы хотите, но это самое простое кроссплатформенное решение, которое я знаю, для выполнения низкоуровневых операций с ISO-образами в python… Удачи в любом случае!

Ответ №1:

Вы можете использовать для листинга и извлечения, я протестировал первый.

https://github.com/barneygale/iso9660/blob/master/iso9660.py

 import iso9660
cd = iso9660.ISO9660("/Users/murat/Downloads/VisualStudio6Enterprise.ISO")
for path in cd.tree():
    print path
  

https://github.com/barneygale/isoparser

 import isoparser
iso = isoparser.parse("http://www.microsoft.com/linux.iso")

print iso.record("boot", "grub").children
print iso.record("boot", "grub", "grub.cfg").content
  

Ответ №2:

Видели ли вы Hachoir, библиотеку Python для «просмотра и редактирования двоичного потока поле за полем»? У меня не было необходимости пробовать это самостоятельно, но ISO 9660 указан как поддерживаемый формат синтаксического анализа.

Ответ №3:

PyCdlib может читать и редактировать файлы ISO-9660, а также расширения Joliet, Rock Ridge, UDF и El Torito. В его документации есть множество подробных примеров, в том числе один, показывающий, как редактировать файл на месте. На момент написания он не может добавлять или удалять файлы или редактировать каталоги. Однако он по-прежнему активно поддерживается, в отличие от библиотек, связанных в старых ответах.

Ответ №4:

  1. Конечно, как и с любым файлом.

  2. Это может быть сделано с помощью операций открытия / чтения / записи / поиска / сообщения / закрытия файла. Упакуйте / распакуйте данные с помощью struct / ctypes. Это потребует серьезных знаний о содержимом ISO, но я полагаю, вы уже знаете, что делать. Если вам повезет, вы можете попробовать использовать mmap — интерфейс для отображения содержимого файла в виде строки.

Комментарии:

1. я имею в виду, без реализации всей спецификации ISO с нуля, что мне пришлось бы сделать, если бы я хотел использовать эти операции над ним…

2. Это правда, и я боялся, что вы скажете что-то вроде этого. Если вам нужно поработать с несколькими байтами внутри ISO, возможно, оно того стоит. Если вы хотите, то есть заменить содержимое файла другим, возможно, отличающимся по размеру, вам потребуется реконструировать файловую систему, точно так же, как это делают разработчики компакт-дисков.

3. похоже, это ответ, по крайней мере, с учетом комментария