我有一个路径(包括目录和文件名)。
我需要测试文件名是否有效,例如,文件系统是否允许我创建具有这样一个名称的文件。
其中的文件名 有一些 Unicode 字符。
可以安全地假设路径的目录段是有效的和可访问的(我想让这个问题更普遍一些,但显然我问得太过了)。
我非常不想逃避任何事情,除非我 有到。
我会发布一些我正在处理的示例字符,但显然它们会被堆栈交换系统自动删除。不管怎样,我想保留标准的 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 上运行它,所以我希望避免特定于平台的东西。
``