filesystems файлу указать - Проверьте, действителен ли путь на Python, не создавая файл в целевом пути





2 Answers

if os.path.exists(filePath):
    #the file is there
elif os.access(os.path.dirname(filePath), os.W_OK):
    #the file does not exists but write privileges are given
else:
    #can not write there

Обратите внимание, что path.exists может path.exists строя по нескольким причинам, чем только the file is not there поэтому вам, возможно, придется выполнять более тонкие тесты, например, проверить, существует ли содержащая директория и т. Д.

После моего обсуждения с OP выяснилось, что основная проблема заключается в том, что имя файла может содержать символы, которые не разрешены файловой системой. Конечно, их нужно удалить, но OP хочет поддерживать как можно больше информации, доступной для файловой системы.

К сожалению, я не знаю ничего хорошего для этого. Однако share более подробно рассматривает обнаружение проблемы.

модулю

У меня есть путь (включая каталог и имя файла).
Мне нужно проверить, является ли имя файла действительным, например, если файловая система позволит мне создать файл с таким именем.
В имени файла есть некоторые символы Юникода .

Можно с уверенностью предположить, что сегмент каталога пути действителен и доступен ( я пытался сделать вопрос более универсальным и, видимо, слишком сильно ).

Я очень не хочу, чтобы что-то избегать, если только не придется .

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

Вот улов. Там может (или не быть) уже файл в целевой путь. Мне нужно сохранить этот файл, если он существует, и не создавать файл, если он этого не делает.

В основном я хочу проверить, могу ли я писать путь, фактически не открывая путь для записи (и автоматическое создание файлов / клонирование файлов, которое обычно влечет за собой).

В качестве таких:

try:
    open(filename, 'w')
except OSError:
    # handle error here

отсюда

Неприемлемо, потому что он перезапишет существующий файл, который я не хочу касаться (если он есть), или создайте указанный файл, если это не так.

Я знаю, что могу сделать:

if not os.access(filePath, os.W_OK):
    try:
        open(filePath, 'w').close()
        os.unlink(filePath)
    except OSError:
        # handle error here

Но это создаст файл в filePath , который мне тогда os.unlink .

В конце концов, похоже, что он тратит 6 или 7 строк на то, что должно быть таким же простым, как os.isvalidpath(filePath) или аналогичным.

В стороне, мне нужно, чтобы это работало (по крайней мере) на Windows и MacOS, поэтому я хотел бы избегать специфичных для платформы материалов.

``




С Python 3, как насчет:

try:
    with open(filename, 'x') as tempfile: # OSError if file exists or is invalid
        pass
except OSError:
    # handle error here

С опцией «x» нам также не нужно беспокоиться о гоночных условиях. См. Документацию here .

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






Related