我有脚本调用其他脚本文件,但我需要获取当前在该进程中运行的文件的文件路径.
例如,假设我有三个文件.使用execfile:
script_1.py电话script_2.py.script_2.py打电话script_3.py.我怎样才能获得的文件名和路径script_3.py,从内部代码script_3.py,而无需从传递这些信息作为参数script_2.py?
(执行os.getcwd()返回原始起始脚本的文件路径而不是当前文件的.)
我曾经只是使用像这样的命令打开与当前运行的Python脚本位于同一目录中的文件
open("Some file.txt", "r")
Run Code Online (Sandbox Code Playgroud)
但是,我发现当脚本在Windows中通过双击运行时,它会尝试从错误的目录中打开该文件.
从那以后我使用了表格的命令
open(os.path.join(sys.path[0], "Some file.txt"), "r")
Run Code Online (Sandbox Code Playgroud)
每当我想打开一个文件.这适用于我的特定用法,但我不确定是否sys.path[0]可能在其他一些用例中失败.
所以我的问题是:打开与当前运行的Python脚本位于同一目录中的文件的最佳和最可靠的方法是什么?
这是我到目前为止能够弄清楚的:
os.getcwd()并os.path.abspath('')返回"当前工作目录",而不是脚本目录.
os.path.dirname(sys.argv[0])并os.path.dirname(__file__)返回用于调用脚本的路径,该路径可能是相对的,甚至是空白的(如果脚本在cwd中).此外,__file__当脚本在IDLE或PythonWin中运行时不存在.
sys.path[0]并且os.path.abspath(os.path.dirname(sys.argv[0]))似乎返回脚本目录.我不确定这两者之间是否有任何区别.
编辑:
我刚刚意识到我想做的事情会更好地描述为"在与包含模块相同的目录中打开一个文件".换句话说,如果我导入了一个我在另一个目录中编写的模块,并且该模块打开了一个文件,我希望它在模块的目录中查找该文件.我认为我发现的任何东西都不能做到这一点......
你能告诉我如何读取Python包中的文件?
我加载的包有许多我想从程序中加载的模板(用作字符串的文本文件).但是如何指定此类文件的路径?
想象一下,我想从以下位置读取文件:
package\templates\temp_file
Run Code Online (Sandbox Code Playgroud)
某种路径操纵?包基路径跟踪?
问题:编写一个要求用户输入秒数的程序,其工作方式如下:
一分钟内有60秒.如果用户输入的秒数大于或等于60,则程序应显示该秒数的分钟数.
一小时有3600秒.如果用户输入的秒数大于或等于3600,程序应显示该秒数的小时数.
一天有86400秒.如果用户输入的秒数大于或等于86400,则程序应显示该秒数的天数.
到目前为止我所拥有的:
def time():
sec = int( input ('Enter the number of seconds:'.strip())
if sec <= 60:
minutes = sec // 60
print('The number of minutes is {0:.2f}'.format(minutes))
if sec (<= 3600):
hours = sec // 3600
print('The number of minutes is {0:.2f}'.format(hours))
if sec <= 86400:
days = sec // 86400
print('The number of minutes is {0:.2f}'.format(days))
return
Run Code Online (Sandbox Code Playgroud)