python显示该文件所在目录

 

有时在代码中会有一些保存文件到当前目录的操作,而这个“当前目录”是会随着运行方式不同而改变的,看以下例子:

import os
# 在目录C:\Users\HP\Desktop新建Untitled-1.py
# 在当前目录下打开test.txt,没有就新建一个,写入字符串,并保存
with open('test.txt', 'w+', encoding='utf-8') as f:
    f.write('This is a test line.')

我们在IDE中运行这段代码,结果在C:\Users\HP\Desktop发现了test.txt,确实是在和代码相同目录下。

接下来在命令行中运行该文件,首先是不cd到其他路径,直接运行:

python C:\Users\HP\Desktop\Untitled-1.py

然而在当前路径并没有显示test.txt这个文件,那么去其他路径找找,结果在C:\Users\HP这个路径找到了,说明此时的默认路径发生了变化。

接着在cmd中cd到另外一个路径,如G盘,再次运行Untitled-1.py——

在G盘发现了test.txt。

由此证明,在不同的路径下运行.py,默认路径是不同的。那么如何保证在不同路径下运行都能使文件保存在代码所在路径呢?只能用绝对路径了:

import os
# os.path.abspath()返回文件的绝对路径,__file__指该.py文件,这样返回的绝对路径是包括文件的
path = os.path.abspath(__file__)
print(path)
# 我们需要代码文件所在的路径,不包含文件本身,可以搭配os.path.dirname(path)
print(os.path.dirname(path))

输出结果:

c:\Users\HP\Desktop\Untitled-1.py
c:\Users\HP\Desktop

值得注意的是,os.path.dirname(path)是不能识别文件名的,它只是将path最后一层给删掉,也就是说如果对os.path.dirname(path)的结果再用一次os.path.dirname,输出结果就是

c:\Users\HP