os
一、获取路径
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:\Users\Administrator\Desktop\file'
for dirpath,dirnames,filenames in os.walk(path):
print(dirpath,dirnames,filenames)
输出结果如下:
C:\Users\Administrator\Desktop\file ['file1', 'file2'] ['file_test1.txt', 'file_test2 .txt'] C:\Users\Administrator\Desktop\file\file1 [] ['file1_test1.txt', 'file1_test2.txt'] C:\Users\Administrator\Desktop\file\file2 [] ['file2_test1.txt']
获得一个路径下面所有的文件路径:
import os
path = r'C:\Users\Administrator\Desktop\file'
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:\Users\Administrator\Desktop\file和C:\Users\Administrator\Desktop\file\file1等。
dirnames列出了目录路径下面所有存在的目录的名称。比如在 C:\Users\Administrator\Desktop\file下面有两个目录:file1和file2,那么它就列出了这个目录路径下的目录名称。
filenames列出了目录路径下面所有文件的名称。同样在 C:\Users\Administrator\Desktop\file下面有两个文件file_test1.txt和file_test2 .txt,那么程序将会列出这两个文件名。
得到的结果如下:
C:\Users\Administrator\Desktop\file\file_test1.txt C:\Users\Administrator\Desktop\file\file_test2 .txt C:\Users\Administrator\Desktop\file\file1\file1_test1.txt C:\Users\Administrator\Desktop\file\file1\file1_test2.txt C:\Users\Administrator\Desktop\file\file2\file2_test1.txt
浙公网安备 33010602011771号