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: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
原文地址:https://www.cnblogs.com/zzy-9318/p/9524189.html