我在python 2.7中有一个程序,它根据用户输入编写某些文件和目录。我需要确保文件和目录对linux和windows都有效,因为文件将通过两个操作系统进行交换。这些文件最初将在linux中创建,手动移动到Windows。
我已经通过Python文档,堆栈交换和谷歌的几个页面进行了检查,但没有提供任何有用的信息,这很奇怪,因为我认为这将是一个相当普遍的问题。
有一个简单的解决方案吗?
编辑: 我想验证directory-filename,因为用户输入的路径不适用于linux或windows。例如,如果用户输入“Folder1 / This:Error / File.txt”,程序会将此视为错误。
该程序将在Linux中运行并在linux中写入文件,但稍后文件将被移动到Windows。前向/反斜杠的差异不是问题,但是其他可能适用于Linux但不适用于windows的字符会出现问题。
此外,文件或目录通常不会出现(因为它们即将被创建),所以我需要检查保存在字符串中的路径是否是有效路径。
答案 0 :(得分:3)
你的问题仍然有点模糊。如果您正在讨论在使用不同操作系统时构建/指定目录路径,您可能需要查看os和 os.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,如上所述。验证字符串是否指向现有目录