Мне нужно проверить, является ли имя файла допустимым, например. если файловая система позволит мне создать файл с таким именем.
Имя файла содержит несколько символов Юникода.
Можно с уверенностью предположить, что сегмент пути к каталогу действителен и доступен (Я пытался сделать вопрос более общеприменимым, и, видимо, я зашел слишком далеко).
Мне очень не хочется избегать чего-либо, если я не должны.
Я бы опубликовал несколько примеров символов, с которыми имею дело, но, очевидно, они автоматически удаляются системой обмена стеками. В любом случае, я хочу сохранить стандартные объекты Юникода, такие как ö, и экранировать только те элементы, которые недопустимы в имени файла.
Вот в чем загвоздка. В целевой точке пути уже может быть (или не быть) файл. Мне нужно сохранить этот файл, если он существует, и не создавать файл, если он не существует.
По сути, я хочу проверить, могу ли я записать по пути без фактического открытия пути для записи (и автоматического создания файла/затирания файла, которое обычно влечет за собой это).
Как такое:
Код: Выделить всё
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
В конце концов, кажется, что требуется 6 или 7 строк, чтобы сделать что-то такое же простое, как os.isvalidpath(filePath) или подобное.
Кроме того, мне нужно это для работы (по крайней мере) на Windows и MacOS, поэтому я бы хотел избежать специфичных для платформы вещей.
Подробнее здесь: https://stackoverflow.com/questions/953 ... e-paths-ta
Мобильная версия