让python脚本始终引用同一目录,而不管它位于何处';在系统中运行

让python脚本始终引用同一目录,而不管它位于何处';在系统中运行,python,Python,我有一个python脚本,它接受文件名作为参数,并对这些文件执行操作。当前,脚本与其操作的文件位于同一目录中。但是我希望能够在操作系统的任何地方运行python脚本。当我将文件名作为脚本的参数时,无论python脚本在系统中运行在何处,它都应该确切地知道要查找哪个目录。如何在python中实现这一点 下面是脚本的相关部分。我可以硬编码路径吗? type_mapping_file是作为参数传递到脚本中的文件名 data = None with open (type_mapping_file, "r

我有一个python脚本,它接受文件名作为参数,并对这些文件执行操作。当前,脚本与其操作的文件位于同一目录中。但是我希望能够在操作系统的任何地方运行python脚本。当我将文件名作为脚本的参数时,无论python脚本在系统中运行在何处,它都应该确切地知道要查找哪个目录。如何在python中实现这一点

下面是脚本的相关部分。我可以硬编码路径吗? type_mapping_file是作为参数传递到脚本中的文件名

data = None
with open (type_mapping_file, "r") as myfile:
    data=myfile.read()

if(data is not None):
    request_params = {'type': type_name, 'index': index_name}

    send_http_request("/index/type/create", request_params, base_url, post_body=data)

提前谢谢你。

它怎么知道

如果它是一个常量路径,您可以将其硬编码到脚本中,并使用
os.path
构建完整路径:

import os
import sys

BASE_PATH = '/my/const/path'

fullpath = os.path.join(BASE_PATH,sys.argv[1])

尽管,如注释中所述,更灵活的解决方案是将路径作为单独的参数传递,或者为每个文件传递绝对路径,我假定您正在寻找一种方法来找到通过相对路径给出的路径,可能是从另一个位置调用脚本本身

$ cat print_path.py
import os
import sys

print os.path.abspath(sys.argv[1])
如果在相对路径上调用此脚本,它将打印绝对路径,以便您可以在磁盘上找到它。魔法来自
os.path.abspath()

如果你是从其他地方打来的话

$ python Desktop/print_path.py Desktop/planning.md
/Users/Gijs/Desktop/planning.md
编辑


不,等等,您正在查找正在执行的python文件的位置。这在
\uuuu文件中,请参阅

当前文件的完整路径是一个名为
\uuuuu file\uuuu
的神奇变量。这是一个适用于以下函数的参数:

然后,您可以使用命令行上提供的参数
os.path.join()
this获取与脚本位于同一目录中的文件,无论这些文件位于何处


请注意,以这种方式使用
\uuu文件\uuu
对于可重用软件包来说并不理想。最好使用或等效的Setuptools功能。基本上,您向它传递一个模块或包名(通常是
\uuuuuu name\uuuuuu
,当前模块的名称,或
\uuuuuuuuu package\uuuu
,您所在包的名称),然后它为您检索文件。如果您的模块要进入一个可导入的zip文件,或者在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?与在脚本中简单地用硬编码路径声明变量相比,您所寻找的有什么不同?将参数作为完整路径提供如何?传入绝对路径,期望绝对路径。嗨,Padraic,os.chdir在所有操作系统中都能工作吗?Windows/linux?
$ python Desktop/print_path.py Desktop/planning.md
/Users/Gijs/Desktop/planning.md
print("This Python file is in " + os.path.dirname(__file__))