У меня есть путь (включая каталог и имя файла).
Мне нужно проверить, является ли имя файла допустимым, например. если файловая система позволит мне создать файл с таким именем.
Имя файла содержит некоторые символы Юникода .
Можно с уверенностью предположить, что сегмент пути к каталогу действителен и доступен (Я пытался сделать вопрос более общеприменимым, и, видимо, я зашел слишком далеко).
Я очень не хочу ни от чего бежать, если только мне не придется.
Я бы опубликовал несколько примеров персонажей, с которыми имею дело, но, видимо, они автоматически удаляются системой обмена стеками. В любом случае, я хочу сохранить стандартные объекты Unicode, такие как ö
, и избегать только тех вещей, которые недопустимы в имени файла.
Вот в чем загвоздка. В целевом пути уже может быть (а может и не быть) файл. Мне нужно сохранить этот файл, если он существует, и не создавать файл, если его нет.
В основном я хочу проверить, могу ли я могу записать в путь без фактического открытия пути для записи (и автоматического создания/затирания файлов, что обычно влечет за собой).
Как таковой:
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, поэтому я хотел бы избежать вещей, специфичных для платформы.
``