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