файловые системы python и windows: проверьте, существует ли имя файла внутри zip-архива - PullRequest
0 голосов
/ 24 октября 2018

Работа под окнами с python 2.x, файлы на локальных дисках (не UNC).

Кажется, ziplib хранит имена файлов внутри zip-архива, удаляя букву диска и преобразуя разделитель пути:

C: \ msala \ test.txt -> msala / test.txt

Вопросы:

  1. совместимо ли это поведение сспецификации формата файла zip или просто предостережение о ziplib?

  2. как я могу проверить, находится ли данное имя файла в архиве?

Я предпочитаю избегать этого уродливого хака:

if sys.platform == "win32" :
    if filename[1:3] == ":\\" :
        filename = filename[3:]
    filename = filename.replace(os.sep, '/')

if filename in zfh.namelist() :

ИМХО, это очень непитонично (включая батареи?!), Чтобы справиться с этим ...

1 Ответ

0 голосов
/ 24 октября 2018

Вопрос 1: из 4.4.17 (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)

Все косые черты ДОЛЖНЫ быть прямыми косыми чертами '/', в отличие от обратных косых черт '\' для совместимости с файловыми системами Amiga и UNIX и т. Д.

Вопрос 2: есть много способов сделать это, например,

zip_filename = os.path.splitdrive(filename)[1].replace('\\', '/')

(должно одинаково хорошо работать с путями Windows на окнах и путями Linux на Linux).

...