将文件路径传递到另一个位置的另一个 Python 文件

Passing path of file to another Python File in Another Location

我在另一个需要图像文件路径的位置有一个 Python 文件。这是文件结构:

Main_Dir
 - main.py
 - test.jpg
 - Second_Dir
    - other.py

我的 main.py 正在调用 other.py 中的函数并将 "test.jpg" 作为参数传递。显然,other.py 看不到这张图片,因为它不在它的目录中。有没有办法让 other.py 使用 test.jpg 而不必传递绝对路径?

main.py

process_image("test.jpg")

other.py

def process_image(image_path):
    rotate(image)
    a*b = c
    ....

错误:

No such file or directory: 'test.jpg'

您可能想使用文件的 'absolute path',这是可以在同一台计算机上的任何位置使用的完整路径:

from pathlib import Path

process_image(Path("test.jpg").absolute())

更好的可能是 .resolve(),它也将解析任何符号链接,并且只为您提供正在传递的对象的 'real' 路径。

process_image(Path("test.jpg").resolve())

但是,简单的导入不会更改脚本的工作目录 - 脚本不会简单地使用它自己的位置作为参考。所以,如果你不在它实际所在的文件夹中启动 main.py,你可能仍然有问题。

要解决这个问题,请在首次启动程序时获取 main.py 脚本的位置:

location = Path(__file__).parent()
my_file = (location / 'test.jpg').resolve()
process_image(my_file)

这是有效的,因为 __file__ 将包含调用它的脚本的文件名,.parent() 获取父文件夹(即脚本所在的文件夹),其余部分与前。请注意 Path('dir') / 'name.ext' 只是构建路径的一种好方法 - Python 允许 'dividing' 通过字符串 Path 来扩展路径。

注意:不要担心您可能会在已解析的路径中看到正斜杠。尽管 Windows 并不总是支持使用正斜杠,但 Python 函数支持(除非您使用 Python 函数直接执行某些 Windows 命令)。正斜杠是每个 OS 的标准,除了 Windows,这就是为什么 Python 默认使用它 - 出于多种原因使用它们并不是一个坏主意。