我正在研究Python项目的一部分,结构如下:
project/some_folder/another_folder/my_work
。
在此文件夹中,包含代码的文件为run.py
。
在同一文件夹中,我还有一个input_file
,我从中读取一些数据,处理它,并将结果写入output_file
。
所以在run.py
我有类似的东西:
with open("input_file") as f:
do_something()
和
with open("output_file") as f:
store_the_result()
当我在project/some_folder/another_folder/my_work
中执行代码时,这很好用。
但是,当我转到project
并使用python -m some_folder.another_folder.my_work.run
运行代码时,我将无法访问输入文件。
我试图通过使用文件的aboslute路径来解决这个问题,但这只能在我的机器上运行。如果有人将我的代码复制到他/她的机器上,他/她仍然需要修改硬编码的绝对路径。
如何设置文件的路径,以便我可以在包含输入和输出文件的文件夹中启动程序,或者将其作为模块运行,其他人在运行时不需要修改文件的路径他们机器上的代码?
答案 0 :(得分:4)
您可以获取正在运行的模块的路径,然后从那里创建一个完整的路径:
import os
module_path = os.path.dirname(os.path.realpath(__file__))
input_path = os.path.join(module_path, 'input_file')
output_path = os.path.join(module_path, 'output_file')
with open(input_path) as f:
do_something()
with open(output_path) as f:
store_the_result()
答案 1 :(得分:0)
如果未明确指定“input_file”路径,则Python假定它位于执行Python脚本的当前目录中。 Paco H给出的答案应该可以解决问题。