Если я распаковываю Zip-файл с помощью библиотеки Python ZipFile, где файл был создан в Windows, но мой код работает в Unix-подобном, всегда ли разделители путей будут в стиле Unix?
Разделители путей Python ZipFile
comment
Похоже, так и должно быть, поскольку он не хранится в виде строки. Я очень на это надеюсь :)
- person fncomp   schedule 18.11.2011
comment
Вы бы на это надеялись! Но когда вы имеете дело с компьютерами, надежда не имеет ничего общего ...
- person Joe   schedule 18.11.2011
Ответы (1)
Внутри ZipFile хранятся косые черты в соответствии с требованиями спецификации zip-файла.
Внешне они переводятся с использованием os.sep, поэтому он будет соответствовать тому, что обычно ожидается на данная платформа.
Ссылки на код:
- http://hg.python.org/cpython/file/2.7/Lib/zipfile.py#l295
- http://hg.python.org/cpython/file/2.7/Lib/zipfile.py#l1046
person
Raymond Hettinger
schedule
18.11.2011
Спасибо! Я предположил, что это правда, но иметь доказательства - хорошо.
- person Joe; 18.11.2011
Обратите внимание, что это преобразование применяется только при создании записи в ZIP-архиве. При доступе к существующим элементам (например, с
zip_file.read('dir/file.txt')
) всегда должны использоваться косые черты.
- person Feuermurmel; 29.08.2012
+1 за ссылку на спецификацию zip файла. Спасибо!!! Вот соответствующий раздел: 4.4.17 имя файла: (Переменная) 4.4.17.1 Имя файла с необязательным относительным путем. Сохраненный путь НЕ ДОЛЖЕН содержать буквы диска или устройства, а также косую черту в начале. Все косые черты ДОЛЖНЫ быть прямыми косыми чертами '/' в отличие от обратных косых черт '\' для совместимости с файловыми системами Amiga и UNIX и т. Д. Если ввод поступил со стандартного ввода, поле имени файла отсутствует.
- person Howard Rubin; 30.06.2015