Python中检查目录是否有效

4
我有一个Python 2.7程序,根据用户输入编写某些文件和目录。我需要确保文件和目录对Linux和Windows都有效,因为这些文件将通过两个操作系统交换。这些文件最初将在Linux中创建,并手动移动到Windows。
我已经查阅了Python文档、堆栈交换和几页谷歌,但没有找到任何可用的信息,这很奇怪,因为我想象这应该是一个相当普遍的问题。
是否有简单的解决方案?
编辑: 我想验证目录文件名,以防用户输入无法在Linux或Windows上工作的路径。例如,如果用户输入"Folder1/This:Error/File.txt",程序将视其为错误。
该程序将在Linux上运行并编写Linux中的文件,但稍后文件将被移动到Windows。正斜杠/反斜杠的差异不是问题,但可能适用于Linux但不适用于Windows的其他字符会导致问题。
此外,通常文件或目录不存在(因为它们即将被创建),因此我需要检查保存在字符串中的路径是否是有效路径。

2
“valid”是什么意思?你是指想知道名称是否有效吗? - BrenBarn
4
什么是“适用于Linux和Windows”的意思?换行符? - Danica
2
@Dougal 可能会涉及到一些内容,例如在NTFS文件名中不能使用?*,但在ext4中可以(虽然不建议这样做),或者从Linux机器向NTFS分区写入以'..'结尾的文件会产生有趣的结果... - Jon Clements
3个回答

6

我不确定是否有内置函数能够完成你想要的任务,所以你可能需要自己动手。

最好的办法是创建一个“白名单”,列出你知道有效的字符,例如字母数字、下划线等。然后,如果用户输入的文件名中有任何不在此列表中的字符,就会弹出错误提示。如果这个白名单遗漏了一些应该有效的字符也没关系,只要正确率达到95%(只要5%是假阴性)就可以了。

请注意,除了无效的字符之外,还可能存在其他问题。参见此问题,了解编写这样的函数时需要考虑的各种因素。

最后,一个解决方案是自己命名文件,而不是允许用户这样做。根据你的情况,你可能能够用一个文件名存储文件,但在应用程序中,你看到它被引用为另一个名称。当然,如果用户将直接在程序之外访问这些文件,这可能会令人困惑。


我正在制作一个迷你模块来完成我需要的功能。我很快会将它上传到Github上。 - Reimus Klinsman
我已经完成了验证目录路径是否有效的模块。它目前已经具备我需要的功能,但还可以添加一些内容。如果有人有兴趣使用它或为其添加功能,请访问以下链接:https://github.com/markwingerd/checkdir - Reimus Klinsman

3
您的问题还有点模糊。如果您在处理不同操作系统时需要构建/指定目录路径,您可能需要查看osos.path模块,特别是os.sep
此外,在创建路径时,最好使用os.path.join()而不是使用字符串函数。
然后还有这些(也许这就是您所说的“有效”文件和目录)?

os.path.isdir(path)

如果路径是现有目录,则返回True。这会跟随符号链接,因此islink()和isdir()可能对于同一路径都为true。

os.path.isfile(path)

如果路径是现有的常规文件,则返回True。这将跟随符号链接,因此islink()和isfile()可以对于相同的路径都为真。
还有许多os.path函数,例如os.path.islink()等,如果这是您要问的内容,您可能会在那里找到答案。

-1
如果您使用os.path.join创建目录字符串,则可以根据您所在的环境正确编写路径。然后,您可以像上面建议的那样使用os.path.isdir来验证该字符串是否指向现有目录。

os.path.join 不会告诉开发人员路径是否过长或包含无效字符。它只会根据所使用的操作系统将两个路径连接在一起。 - Rusty Weber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接