【问题标题】:How to get an absolute file path in Python? (Get rid of backslashes)如何在 Python 中获取绝对文件路径? (去掉反斜杠)
【发布时间】:2021-08-15 18:16:52
【问题描述】:

给定诸如“mydir/myfile.txt”之类的路径,如何在 Python 中找到文件相对于当前工作目录的绝对路径?例如。在 Windows 上,我可能会得到:

"C:/example/cwd/mydir/myfile.txt".

我试过了:mypath = os.path.abspath("../mydir/myfile.txt")。但我得到了:

>> print(mypath)
C:\example\cwd\mydir\myfile.txt

请注意,当我执行mypath 时,我有C:\\example\\cwd\\mydir\\myfile.txt

【问题讨论】:

  • 你的问题不清楚。给定 "mydir/myfile.txt" 时的预期输出是什么?文件"C:/example/cwd/mydir/myfile.txt" 的绝对路径?从当前目录到文件 "../mydir/myfile.txt" 的相对路径?还是“路径分隔符”的问题(例如斜杠/ vs 反斜杠`\`)?
  • 我想联系myfile.txt。我想输入"../mydir/myfile.txt" 而不是"C:/example/cwd/mydir/myfile.txt",所以当我分享我的代码时,他们可以在不更改目录的情况下重用我的代码,因为"/mydir/myfile.txt" 是固定的。

标签: python path relative-path absolute-path


【解决方案1】:

除了C:\example\cwd\mydir\myfile.txt,你会期待什么?

您看到的是绝对的 Windows 文件路径。 Windows 使用反斜杠作为文件路径,而 Linux 使用正斜杠。 python os.path 包会自动处理转换,因此尽管您输入了 Linux 风格的路径(至少几乎,因为 Linux 不知道 C 之类的驱动器),但它会自动转换为 Windows(当您在Windows 机器)。

另见:What is the filepath difference between window and linux in python3?

【讨论】:

    【解决方案2】:

    根据您对我的评论的回答,您想要的是使用文件的相对路径,而不是文件的绝对路径。
    我建议您使用os.path.relpath 来计算从当前工作目录到文件的相对路径:

    import os.path
    
    # inputs
    absolute_path_to_file = r"C:\example\cwd\mydir\myfile.txt"
    current_working_directory = os.path.abspath(os.path.curdir)  # C:\example\cwd\my_other_dir
    
    # using os.path.relpath
    relative_path_from_current_working_directory_to_file = \
        os.path.relpath(absolute_path_to_file, current_working_directory)
    
    # result
    print(relative_path_from_current_working_directory_to_file)  # ..\mydir\myfile.txt
    

    如果你愿意,你可以省略os.path.relpath(命名为start)的第二个参数,因为它默认为你的当前目录(见os.curdir),这样你就可以简单地做:

    relative_path_from_current_working_directory_to_file = \
        os.path.relpath(absolute_path_to_file)
    

    【讨论】:

    • 另外,您可以混合使用正斜杠 (/) 和反斜杠 (\ )。落后的主要在 Windows 上使用,其他的则在其他地方使用。一般来说,最好不要混淆它们,这可能会导致您的程序无法正常运行,或者人们不理解您的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2017-03-16
    相关资源
    最近更新 更多