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