python通过相对路径获取文件

snz8szmq  于 2023-05-19  发布在  Python
关注(0)|答案(1)|浏览(188)

我已经摸索了一段时间,我在想也许在python中没有真实的的方法来做到这一点,最好的方法是总是让用户找出他们的绝对路径,并将其传递给我的函数,我可以运行它。
如果我从代码read_file.py所在的目录中运行,这个代码就可以工作了。但是,如果我在cd ..上导航一个目录并尝试运行python my_directory/read_file.py,则会失败,并说找不到文件。
有没有一种方法,我可以通过在相对路径,并有它总是工作,无论我在哪里的终端,并运行此代码。我有NodeJS和Java背景。

输入

"""
read the a file from a path with both relative and absolute value to see which one works
the function accepts a path value instead of a str value
"""

import os
from pathlib import Path

def read_file_resolve(file_path: Path) -> None:
    file_path = file_path.resolve()

    with file_path.open() as f:
        print(f.read())

def read_file_os_absolute(file_path: Path) -> None:
    file_path = os.path.abspath(file_path)
    file_path = Path(file_path)

    with file_path.open() as f:
        print(f.read())

if __name__ == "__main__":
    my_file_path = Path("./upload_to_s3/my_downloaded_test.txt")

    # Get the absolute path to the file.
    # absolute_file_path = os.path.abspath(my_file_path)

    # Read the file.
    try:
        read_file_resolve(file_path=my_file_path)
        print("resolve worked")

    except Exception:
        read_file_os_absolute(file_path=my_file_path)
        print("os abs worked")

输出:

FileNotFoundError: [Errno 2] No such file or directory

但是当我从它所在的目录中运行它时,它工作正常

moiiocjp

moiiocjp1#

__file__是脚本本身的路径。
假设你的相对路径总是相对于脚本位置,例如:

./my_directory
│   read_file.py
│
└───upload_to_s3
        my_downloaded_test.txt

用途:

my_file_path = Path(__file__).parent / 'upload_to_s3' / 'my_downloaded_test.txt'

那么当前目录就不重要了。

相关问题