我已经在python中编写了一个代码,该代码使用/在文件夹中创建特定文件,如果我想在Windows中使用该代码将无法正常工作,有没有一种方法可以在Windows和Linux中使用该代码。
在python中,我使用以下代码:
pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')
当我在Windows计算机中使用我的代码时,我的代码将无法工作。
在Linux和Windows中如何使用" /"(目录分隔符)?
您可以首先根据Win / * nix对其进行定义,然后使用该变量。
在Windows中,您可以使用或/作为目录分隔符。
Windows在目录路径中支持。您有什么具体问题?发布一些说明问题的代码。
除非您依赖Windows用户空间程序,否则正斜杠同样有效。但是某些cmd命令对此有问题。
@MichaelGeary:我用示例编辑了问题,现在可以看看吗?
@MichaelGeary:只是有时候。有时没有。 (仅从经验上讲出来-我不知道它在哪些情况下失败以及在哪些情况下没有失败。)
@Mehrdad:您知道Win32 API不接受/的示例吗? (不计算cmd.exe和其他程序)
@eryksun:当然;例如,只需尝试PathCombine(buf,"C:","Temp"),然后再尝试PathCombine(buf,"C:\","Temp")。尽管我不确定为什么要打折cmd.exe,但对于以各种语言实现system()来说,它至关重要。
@Mehrdad:"C:\Temp"可能很丑,但这是有效路径。可以重复使用斜杠或反斜杠。
@eryksun:挑剔,挑剔,是吗? :)那么PathIsRoot("C:\") == TRUE和PathIsRoot("C:") == FALSE呢? (仅供参考,我什至没有记住这些。我只是因为您要求一个示例而立即尝试使用它们。它很容易制作您自己的示例,只需试用一下这些功能即可。)
您是否尝试过os.path.sep?
Windows在可执行文件的显式相对路径中不支持Unix样式斜杠,即.script.py在Windows上不起作用,但.\script.py可以。只需在cmd.exe中尝试。
使用os.path.join()。
示例:os.path.join(pathfile,"output","log.txt")。
在您的代码中将是:rootTree.write(os.path.join(pathfile,"output","log.txt"))
这个作品!
os.path.join使用更复杂的逻辑将多个相对路径组件匹配在一起。 当您只想链接它们时,os.sep.join是正确的选择。
采用:
import os
print os.sep
了解分隔符在当前操作系统上的外观。
在您的代码中,您可以使用:
import os
path = os.path.join('folder_name', 'file_name')
您可以使用os.sep:
>>> import os
>>> os.sep
'/'
还应提及os.path.normpath(pathname),因为它将Windows上的/路径分隔符转换为\分隔符。它还会折叠冗余的上级引用...即A/B和A/foo/../B和A/./B都变为A/B。如果您使用的是Windows,则所有这些都将变为A\B。
这是IMO对该问题的最佳答案,因为它的措辞是"如何在Linux和Windows中使用" /"(目录分隔符)"。 而且它也非常有用-当我需要指定长路径时,我更愿意os.path.normpath(abcdfile.ext)而不是os.path.join(a,b,c,d,file.ext)。
我还发现此答案非常有帮助。 我在寻找一种使用一致的分隔符生成路径的方法。 著名的os.path.join只是连接提供的任何内容。 例如 join("ab","c\d")给出ab\c\d(在Windows上)。 但是我可以通过join和normpath的适当组合来获得预期的结果,例如 a\b\c\d(在Windows上)
一些有用的链接将帮助您:
操作系统
os.path
os.pathsep
pathep? IMO通常有用,但不适用于此。
@glglgl确实。 我寻找了sep,但也无法拒绝自己发布此消息(我以为OP会发现它对将来的工作很有用):)
如果您有幸能够运行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
进行import os,然后使用os.sep
You can use"os.sep"
blockquote>
import os
pathfile=os.path.dirname(templateFile)
directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
rootTree.write(directory)
不要自行建立目录和文件名,请使用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)