Python 创建相对路径并独立于操作系统

Python 创建相对路径并独立于操作系统,python,linux,windows,path,operating-system,Python,Linux,Windows,Path,Operating System,如何获取脚本的文件名作为cwd的相对路径,并且它独立于操作系统 e、 g如果我在linux中,它应该返回“/script.py”,如果我在windows中,它应该返回“\\script.py” 我尝试了os.path.join和os.path.basename(\uu文件\uu),但它返回绝对路径 为什么不让os帮你处理呢 import os import platform path = os.path.basename(__file__) run_on=platform.system() i

如何获取脚本的文件名作为
cwd
的相对路径,并且它独立于操作系统

e、 g如果我在linux中,它应该返回“/script.py”,如果我在windows中,它应该返回“\\script.py”


我尝试了
os.path.join
os.path.basename(\uu文件\uu)
,但它返回绝对路径

为什么不让
os
帮你处理呢

import os
import platform

path = os.path.basename(__file__)
run_on=platform.system()
if run_on=='Windows': path=f'.\\{path}'
elif run_on=='Linux': path=f'./{path}'

print(f'path is {path}')
path = os.path.normcase(os.path.join('.', os.path.relpath(__file__)))

有趣的事实:Windows现在可以使用前斜杠了。Windows可以使用前斜杠,当然可以。但是当我执行
os.walk
时,它会返回带有反斜杠的文件名。。。因此,如果我想将两个文件路径作为字符串进行比较,我也必须使用反斜杠创建字符串。@KlausD.,funner事实:许多Windows API函数根本不支持斜杠作为路径分隔符,例如Windows 8中添加的pathcch函数。例如,
pathchcombineex
“C:/spam”
“/eggs”
错误地连接为
“C:/spam\\\/eggs”
,因为它没有将“/”作为路径分隔符处理。但是,对于
“C:\\spam”
“\\eggs”
,它正确返回
“C:\\eggs”
。还有许多其他类似的例子。只有基本文件API可靠地支持斜杠作为路径分隔符——并且仅在规范化路径中,而不是在非规范化的“\\?\”前缀路径中。
script\u name=“.\\”+os.path.basename(\uu文件\uuuuuuu)if platform.system()=“Windows”else”。/“+os.path.basename(\uu文件\uuuuuuuu)完成了这项任务。谢谢。这将以小写形式返回路径。对于windows来说,这并不重要。但对于我的字符串比较来说,这很重要。如何避免小写?删除
normcase
不会改变大小写,但这就是使用它进行路径比较的全部目的。例如,
os.path.normcase('./foo\\BAR/baz.BLAH')==os.path.normcase('.\\foo\\BAR\\baz.BLAH')
True
,因为
normcase
修复了斜线并使大小写对我们来说是一致的。是的,这不是我不急于使用您的解决方案的原因,即使它是有效的。我不得不在
walk
返回的每一条路径上使用它的原因就是让我感到不快。使用@n1tr0xs解决方案,我只需执行一次即可获得脚本的正确相对路径。希望这是有意义的。然后,如果与walk文件比较,您只需要
os.path.join('.',os.path.relpath(_文件__))
,因为它们的斜杠应该已经修复了。