Как проверить наличие несовместимых с платформой имен папок (файлов) в Python - PullRequest
2 голосов
/ 19 июля 2011

Я хотел бы иметь возможность проверить из python, может ли данная строка быть допустимым именем кросс-платформенной папки - ниже приведена конкретная проблема, с которой я столкнулся (имя папки заканчивается на.), Но я уверен, что некоторые более особые случаи (например: мошенничество и т. д.).

Есть ли для этого библиотека?


Из python (3.2) я создал папку в Windows (7) с именем, оканчивающимся на точку ('.'), Например (без квадратных скобок): [То, что я делал на каникулах, часть II.]

Когда созданная папка была ftp'd (для linux, но я думаю, что это не имеет значения), в ней больше не было точки (а взамен это сломало много гиперссылок).

Я проверил это из командной строки, и похоже, что в папке нет «.» в имени файла

mkdir tmp.
dir
cd tmp 
cd ..\tmp.

Очевидно, добавление одной точки в конце имени папки игнорируется, например ::

cd c:\Users.

работает так же, как и ожидалось.

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Нет, к сожалению, нет способа сделать это. Для окон вы в основном можете использовать следующий код для удаления всех недопустимых символов - но если у кого-то все еще есть файловая система FAT, вам придется обрабатывать их тоже, поскольку они более строги. В основном вам придется читать документацию для всех файловых систем и составлять полный список. Вот NTFS один в качестве отправной точки:

ILLEGAL_NTFS_CHARS = "[<>:/\\|?*\"]|[\0-\31]"
def __removeIllegalChars(name):
    # removes characters that are invalid for NTFS
    return re.sub(ILLEGAL_NTFS_CHARS, "", name)

И тогда вам нужен какой-то список "запрещенных" имен, чтобы избавиться от COM. В значительной степени полный беспорядок, который .. и это игнорирует Linux (хотя там это довольно расслабленно, афаик)

2 голосов
/ 19 июля 2011

Не заканчивайте имя файла или каталога пробелом или точкой.Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс этого не делают.

http://msdn.microsoft.com/en-us/library/aa365247.aspx#naming_conventions

Эта страница также предоставит вам информацию о других недопустимых именах, дляВинда то есть.Включая CON, как вы сказали сами.

Если вы уважаете эти (кажущиеся грубыми) правила, я думаю, что вы будете в безопасности и в Linux, и в большинстве других систем.

...