检查目录在 Python 中是不是有效
Posted
技术标签:
【中文标题】检查目录在 Python 中是不是有效【英文标题】:check to see if a directory is valid in Python检查目录在 Python 中是否有效 【发布时间】:2012-07-21 04:48:33 【问题描述】:我在 python 2.7 中有一个程序,它根据用户输入编写某些文件和目录。我需要确保文件和目录对 linux 和 windows 都有效,因为文件将通过两个操作系统进行交换。这些文件最初将在 linux 中创建并手动移动到 windows。
我检查了 Python 文档、堆栈交换和谷歌的几页,但没有找到任何可用的信息,这很奇怪,因为我想这将是一个相当普遍的问题。
有简单的解决方案吗?
编辑: 我想验证目录文件名,以防用户输入不适用于 linux 或 windows 的路径。例如,如果用户输入“Folder1/This:Error/File.txt”,程序会将其视为错误。
该程序将在 Linux 中运行并在 linux 中写入文件,但稍后这些文件将被移动到 windows。正斜杠/反斜杠的差异不是问题,但其他可能适用于 linux 但不适用于 windows 的字符会出现问题。
此外,文件或目录通常不存在(因为它们即将被创建),所以我需要检查保存在字符串中的路径是否是有效路径。
【问题讨论】:
“有效”是什么意思?您的意思是您想知道 name 是否有效? “对 linux 和 windows 都有效”是什么意思?行尾? @Dougal 可能像你在 NTFS 文件名中不能有?
或 *
之类的东西,但你可以在 ext4 中(虽然不明智),或者写一个以 '. .' 从 Linux 机器到 NTFS 分区有有趣的结果...
【参考方案1】:
我不确定是否有内置函数可以满足您的需求,因此您可能需要自己动手。
最好的办法是创建一个您知道有效的字符的“白名单”。例如:字母数字、下划线等。然后,如果用户给出的文件名有任何不在此列表中的字符,则抛出错误。这个白名单是否遗漏了一些应该起作用的字符并不重要;正确率达到 95%(只要 5% 是假阴性)应该没问题。
请记住,除了无效字符之外,还可能存在一些问题。编写此类函数时,请参阅this question 了解各种注意事项。
最后,一种解决方案是自己命名文件,而不是让用户自己命名。根据您的情况,您可能可以使用一个文件名存储文件,但在应用程序中,您会看到它以不同的名称引用。当然,如果用户将直接在您的程序之外访问这些文件,这可能会造成混淆。
【讨论】:
我正在制作一个微型模块来满足我的需求。我很快就会在 github 上加载它。 我已经完成了用于验证目录路径是否有效的模块。它目前具有我需要的功能,但可以使用一些附加功能。如果有人有兴趣使用它或添加到它这里是链接。 github.com/markwingerd/checkdir【参考方案2】:你的问题还是有点含糊。如果您在使用不同的操作系统时谈论构建/指定目录路径,您可能需要查看os 和 os.path 模块,并在 特别是os.sep。
另外,在创建路径时,最好使用os.path.join()而不是使用字符串函数
还有这些(也许这就是你所说的“有效”文件和目录)?
os.path.isdir(路径)
如果路径是现有目录,则返回 True。这遵循象征性的 链接,因此 islink() 和 isdir() 对于同一路径都可以为真。
os.path.isfile(路径)
如果 path 是现有的常规文件,则返回 True。这遵循象征性的 链接,因此 islink() 和 isfile() 对于同一路径都可以为真。
还有其他许多 os.path 函数,例如 os.path.islink()
等,如果这与您所询问的内容相符,您可能会在那里找到答案。
【讨论】:
【参考方案3】:如果您使用 os.path.join 创建目录字符串,您将根据您所处的环境正确写入路径。 然后您可以使用 os.path.isdir,如上所示。验证字符串是否指向现有目录
【讨论】:
os.path.join 不会告诉开发者路径是否太长或包含无效字符。它只会根据正在使用的操作系统将两个路径连接在一起。以上是关于检查目录在 Python 中是不是有效的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 mongo ObjectID 在 python 中是不是有效?
如何在 Python 中检查字符串是不是是有效的 JSON?