我有一个在Python 2.7中的程序,正在编写基于用户input的某些文件和目录。 我需要确保文件和目录对于Linux和Windows都是有效的,因为文件将通过两个操作系统进行交换。 这些文件最初将在linux中创build,手动移动到Windows。
我已经通过Python文档,堆栈交换和谷歌的几页检查,没有提出任何有用的信息,这是奇怪的,因为我想这将是一个相当普遍的问题。
有一个简单的解决scheme吗?
编辑:我想validation目录文件名incase用户input一个不适用于Linux或Windows的path。 例如,如果用户input“Folder1 / This:Error / File.txt”,程序会将其视为错误。
该程序将在Linux中运行,并在Linux中写入文件,但稍后将文件移动到Windows。 正反斜杠的区别并不是问题,但其他可能适用于linux但不适用于Windows的字符将会出现问题。
此外,文件或目录通常不会出现(因为它们即将被创build),所以我需要检查path,保存在一个string,将是一个有效的path。
我不确定是否有内置的功能可以满足您的需求,所以您可能需要自己动手。
你最好的选择是创建一个你认为有效的字符的“白名单”。 例如:字母数字,下划线等等。然后,如果用户给出的文件名有任何字符不在这个列表中,则抛出一个错误。 如果这个白名单留下几个应该工作的字符,这并不重要, 正确的95%(只要5%是假阴性)应该没问题。
请记住,除了无效的字符之外,还可能存在一些问题。 编写这样一个函数时,请看这个问题 。
最后,一个解决方案是自己命名文件,而不是让用户去做。 根据您的情况,您可能能够使用一个文件名存储文件,但在应用程序中,您会看到以不同的名称引用它。 当然,如果用户直接在程序外部访问这些文件,这可能会让人困惑。
你的问题还是有点含糊。 如果您正在讨论在使用不同操作系统时构建/指定目录路径,则可能需要查看os和os.path模块,特别是os.sep 。
另外,在创建路径时,不要使用字符串函数,最好使用os.path.join()
然后有这些(也许这是你的意思是“有效”的文件和目录)?
os.path.isdir(路径)
如果path是一个现有目录,则返回True。 这遵循符号链接,所以islink()和isdir()对于相同的路径可以是true。
os.path.isfile(路径)
如果路径是现有的常规文件,则返回True。 这遵循符号链接,所以islink()和isfile()对于相同的路径可以是true。
还有其他许多os.path函数,如os.path.islink()
等,如果这是你所问的问题,你可能会在那里找到你的答案。
如果使用os.path.join创建目录字符串,则将根据所处环境正确写入路径。然后可以使用os.path.isdir,如上所述。 以验证该字符串是否指向一个现有的目录