关于Windows:检查目录在python中是否有效

check to see if a directory is valid in Python

我在python 2.7中有一个程序,它根据用户输入编写特定的文件和目录。我需要确保文件和目录对Linux和Windows都有效,因为文件将通过两个操作系统进行交换。这些文件最初将在Linux中创建,并手动移动到Windows。

我查看了python文档、栈交换和谷歌的几个页面,但没有找到任何有用的信息,这很奇怪,因为我认为这是一个相当常见的问题。

有简单的解决方案吗?

编辑:如果用户输入的路径不适用于Linux或Windows,我想验证目录文件名。例如,如果用户输入"folder1/this:error/file.txt",程序会将其视为错误。

该程序将在Linux中运行并在Linux中写入文件,但稍后这些文件将移动到Windows。前向/后向斜杠的区别是没有问题的,但是其他可以在Linux上使用但不能在Windows上使用的字符会出现问题。

此外,通常文件或目录不存在(因为它们即将被创建),所以我需要检查保存在字符串中的路径是否是有效的路径。


我不确定是否有一个内置函数可以满足您的需要,所以您可能需要自己完成它。

你最好的办法是创建一个"白名单"的字符,你知道将是有效的。例如:字母数字、下划线等。然后,如果用户给定的文件名中有任何不在此列表中的字符,则抛出一个错误。不管这个白名单中是否漏掉了几个应该有用的字符;正确地使用95%的字符(只要5%是假阴性字符)就可以了。

请记住,除了字符无效之外,可能还有一些问题。在编写此类函数时,请参阅此问题以了解各种注意事项。

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


你的问题还是有点含糊。如果您在使用不同的操作系统时谈论构建/指定目录路径,那么您可能需要查看操作系统和os.path模块,和特别OS.SEP.

另外,在创建路径时,最好使用os.path.join(),而不是使用字符串函数。

然后是这些(也许这就是您所说的"有效"文件和目录)?

os.path.isdir(路径)

Return True if path is an existing directory. This follows symbolic
links, so both islink() and isdir() can be true for the same path.

os.path.isfile(路径)

Return True if path is an existing regular file. This follows symbolic
links, so both islink() and isfile() can be true for the same path.

还有其他许多os.path函数,如os.path.islink()等,如果这是按照您所问的行,您可能会在那里找到您的答案。


如果使用os.path.join创建目录字符串,您将根据所处的环境正确写入路径。然后您可以使用os.path.isdir,如上所述。验证字符串是否指向现有目录