3

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

我检查了 Python 文档、堆栈交换和谷歌的几页,但没有找到任何奇怪的可用信息,因为我想这将是一个相当普遍的问题。

有简单的解决方案吗?

编辑:我想验证目录文件名,以防用户输入不适用于 linux 或 windows 的路径。例如,如果用户输入“Folder1/This:Error/File.txt”,程序会将其视为错误。

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

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

4

3 回答 3

5

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

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

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

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

于 2012-07-22T22:54:04.553 回答
3

你的问题还是有点模糊。如果您在使用不同的操作系统时谈论构建/指定目录路径,您可能需要查看osos.path模块,尤其是os.sep

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

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

os.path.isdir(路径)

如果 path 是现有目录,则返回 True。这遵循符号链接,因此 islink() 和 isdir() 对于同一路径都可以为真。

os.path.isfile(路径)

如果 path 是现有的常规文件,则返回 True。这遵循符号链接,因此 islink() 和 isfile() 对于同一路径都可以为真。

还有其他许多 os.path 函数,例如os.path.islink()etc,如果这与您所询问的内容相符,您可能会在那里找到答案。

于 2012-07-22T21:56:41.343 回答
-1

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

于 2014-09-28T16:54:48.047 回答