python文件路径分隔,如何在Linux和Windows中的Python中使用“ /”(目录分隔符)?

这篇博客讨论了如何在Python中编写跨平台兼容的代码,特别是在处理文件路径时。文章指出,使用os.path.join()代替手动添加路径分隔符可以确保在Windows和Linux上都能正常工作。os.path.join()函数会根据操作系统的类型自动使用正确的路径分隔符。此外,os.path.normpath()函数也被推荐用于规范化路径,尤其是处理相对路径和冗余的上级引用。
摘要由CSDN通过智能技术生成

我已经在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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值