一、获取路径
os常见方法
os.path.curdir:当前目录 os.path.pardir:父目录 os.path.abspath(path):绝对路径 os.path.join(): 常用来链接路径 os.path.split(path): 把path分为目录和文件两个部分,以列表返回 os.path.dirname(path)
示例1
>>> import os >>> help('os.path.sep') >>> print os.path.sep / >>> print os.path.altsep None >>> print os.path.curdir . >>> print os.path.abspath('/root') /root >>> print os.path.abspath('/root/pp') /root/pp >>> print os.path.abspath('/root/pp/f.c') /root/pp/f.c >>> print os.path.split('/root/pp/f.c') ('/root/pp', 'f.c') >>>
示例2
os.path.dirname(path)
功能:去掉文件名,返回目录
eg: print(os.path.dirname("E:/Read_File/read_yaml.py")) #结果: E:/Read_File print(os.path.dirname("E:/Read_File")) #结果: E:/
os.path.dirname(__file__)
print(__file__) #结果 E:/Read_File/read_yaml.py
__file__表示了当前文件的path
os.path.dirname((__file__) = os.path.dirname(“E:/Read_File/read_yaml.py”)
需求:app.py中想读取config.ini文件的内容,即是获取config.ini绝对路径
思路:
从目录结构上可以看出,config.ini与app.py的父目录同级,
也就是获取到app.py父目录(bin文件夹的路径)的父目录(config文件夹路径)的绝对路径
再拼上config.ini文件名就能获取到config.ini文件
import os def load_file(): # 获取当前文件路径 current_path = os.path.abspath(__file__) # 获取当前文件的父目录 father_path = os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".") # config.ini文件路径,获取当前目录的父目录的父目录与congig.ini拼接 config_file_path=os.path.join(os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".."),'config.ini') print('当前目录:' + current_path) print('当前父目录:' + father_path) print('config.ini路径:' + config_file_path) load_file()
结果
当前目录:/Users/shanml/Documents/python/config/bin/app.py 当前父目录:/Users/shanml/Documents/python/config/bin config.ini路径:/Users/shanml/Documents/python/config/config.ini
main.py中执行app.py的load_file()
from bin.app import load_file
二、递归的情况,一个目录下面既有目录也有文件,使用os.walk
我们在桌面上面建立一个file目录,里面的组织结构如下:
file(dir):
--|file1(dir):
--|file1_test1.txt
--|file1_test2.txt
--|file2(dir)
--|file2_test1.txt
--|file_test1.txt
--|file_test2.txt
运行一下代码:
import os path = r'C:UsersAdministratorDesktopfile' for dirpath,dirnames,filenames in os.walk(path): print(dirpath,dirnames,filenames)
输出结果如下:
C:UsersAdministratorDesktopfile ['file1', 'file2'] ['file_test1.txt', 'file_test2 .txt'] C:UsersAdministratorDesktopfilefile1 [] ['file1_test1.txt', 'file1_test2.txt'] C:UsersAdministratorDesktopfilefile2 [] ['file2_test1.txt']
获得一个路径下面所有的文件路径:
import os path = r'C:UsersAdministratorDesktopfile' for dirpath,dirnames,filenames in os.walk(path): for filename in filenames: print(os.path.join(dirpath,filename))
os.walk输入一个路径名称,以yield的方式(其实是一个生成器)返回一个三元组 dirpath, dirnames, filenames,
dirpath为目录的路径,为一个字符串。比如上面的 C:UsersAdministratorDesktopfile和C:UsersAdministratorDesktopfilefile1等。
dirnames列出了目录路径下面所有存在的目录的名称。比如在 C:UsersAdministratorDesktopfile下面有两个目录:file1和file2,那么它就列出了这个目录路径下的目录名称。
filenames列出了目录路径下面所有文件的名称。同样在 C:UsersAdministratorDesktopfile下面有两个文件file_test1.txt和file_test2 .txt,那么程序将会列出这两个文件名。
得到的结果如下:
C:UsersAdministratorDesktopfilefile_test1.txt C:UsersAdministratorDesktopfilefile_test2 .txt C:UsersAdministratorDesktopfilefile1file1_test1.txt C:UsersAdministratorDesktopfilefile1file1_test2.txt C:UsersAdministratorDesktopfilefile2file2_test1.txt