如何在Linux和Windows中的Python中使用“ /”(目录分隔符)?


190

我已经在python中编写了一个代码,该代码使用/在文件夹中创建特定文件,如果我想在Windows中使用该代码将无法正常工作,有没有一种方法可以在Windows和Linux中使用该代码。

在python中,我使用以下代码:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

当我在Windows计算机中使用我的代码时,我的代码将无法工作。

在Linux和Windows中如何使用“ /”(目录分隔符)?


1
您可以首先根据Win / * nix对其进行定义,然后使用该变量。
fedorqui'SO停止伤害

12
在Windows中,您可以使用\或/作为目录分隔符。
SecurityMatt

12
Windows支持/目录路径。您有什么具体问题?发布一些说明问题的代码。
Michael Geary

除非您依赖Windows用户空间程序,否则正斜杠同样有效。但是某些cmd命令对此有问题。
Pihhan

1
@Mehrdad:您知道Win32 API不接受'/'的示例吗?(不包括cmd.exe和其他程序)
Eryk Sun

Answers:


264

使用os.path.join()。范例:os.path.join(pathfile,"output","log.txt")

在您的代码中将是: rootTree.write(os.path.join(pathfile,"output","log.txt"))


7
os.path.join使用更复杂的逻辑将几个相对路径组件匹配在一起。当您只想链接它们时,os.sep.join是正确的选择。
巴绍(Bachsau)



38

os.path.normpath(pathname)还应提及,因为它将Windows上的/路径分隔符转换为\分隔符。它还折叠冗余uplevel引用...即,A/BA/foo/../BA/./B一切变得A/B。如果您使用的是Windows,那么所有这些都将变为A\B


3
这是IMO对该问题的最佳答案,因为它的措辞是“如何在Linux和Windows中使用“ /”(目录分隔符)”。而且它也非常有用-我宁愿做而os.path.normpath('a/b/c/d/file.ext')不是os.path.join('a','b','c','d','file.ext')在需要指定长路径时做。
ukrutt '16

我还发现此答案非常有帮助。我在寻找一种使用一致的分隔符生成路径的方法。著名的os.path.join只是加入任何提供。例如join("a/b", "c\d")给出a/b\c\d(在Windows上)。但我可以用适当的组合得到预期的结果joinnormpath,例如a\b\c\d(在Windows上)
Sumudu

17

如果您有幸能够运行Python 3.4+,则可以使用pathlib

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour

或者,等效地,

path = Path(dir) / subdir / filename



8

您可以使用“ os.sep

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)

4

不要自行建立目录和文件名,请使用python随附的库。

在这种情况下,相关的是os.path。特别是join,它从目录和文件名或目录创建一个新的路径名,然后从完整路径中获取文件名。

你的例子是

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.