检查目录在Python中是否有效

时间:2012-07-22 21:52:08

标签: python windows linux directory

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

我已经通过Python文档,堆栈交换和谷歌的几个页面进行了检查,但没有提供任何有用的信息,这很奇怪,因为我认为这将是一个相当普遍的问题。

有一个简单的解决方案吗?

编辑: 我想验证directory-filename,因为用户输入的路径不适用于linux或windows。例如,如果用户输入“Folder1 / This:Error / File.txt”,程序会将此视为错误。

该程序将在Linux中运行并在linux中写入文件,但稍后文件将被移动到Windows。前向/反斜杠的差异不是问题,但是其他可能适用于Linux但不适用于windows的字符会出现问题。

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

3 个答案:

答案 0 :(得分:3)

你的问题仍然有点模糊。如果您正在讨论在使用不同操作系统时构建/指定目录路径,您可能需要查看osos.path个模块,以及 特别是os.sep

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

然后有这些(也许这就是你的意思"有效"文件和目录)?

<强> os.path.isdir(路径)

  

如果path是现有目录,则返回True。这符合象征意义   链接,因此对于同一路径,islink()和isdir()都可以为true。

<强> os.path.isfile(路径)

  

如果path是现有常规文件,则返回True。这符合象征意义   链接,因此对于相同的路径,islink()和isfile()都可以为true。

还有其他许多os.path函数,比如os.path.islink()等,如果这与您所询问的一致,您可能会在那里找到答案。

答案 1 :(得分:3)

我不确定是否有内置功能能够满足您的需求,因此您可能需要自己动手。

您最好的选择是创建一个您认为有效的字符“白名单”。例如:字母数字,下划线等。然后,如果用户给出的文件名中没有此列表中的任何字符,则抛出错误。这个白名单是否会遗漏一些应该起作用的字符并不重要;正确的95%(只要5%是假阴性)应该没问题。

请记住,除了无效的字符外,可能还会出现一些问题。有关编写此类函数时的各种注意事项,请参阅this question

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

答案 2 :(得分:-1)

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