python文件及路径管理函数

os的文件操作

os.path

import os

print(os.path.splitext('./data/large.wav'))            # 分离文件名和后缀名 ('./data/large', '.wav')
print(os.path.splitext('./data/large'))                # 分离文件名和后缀名 ('./data/large', '')
print(os.path.split('/root/runoob.txt'))               # 分割文件名与路径 ('/root', 'runoob.txt')
print(os.path.join('root','test','runoob.txt'))        # 将目录和文件名合成一个路径 root/test/runoob.txt

os.path.isdir('d:/books/book')                      # 判断某一路径是否为目录
os.path.isfile('d:/books/book/book.txt')            # 判断某一路径是否为文件

os.path.exists(path)    # 路径存在则返回True,路径不存在返回False
os.path.abspath(path)   # 返回绝对路径
os.path.basename(path) # 返回path的文件名或者最后一个目录名
os.path.dirname(path) # 返回path 除最后一个目录名的目录地址

创建

os.mkdir(r"C:\Users\Never\Desktop\aa")  # 创建一级目录
os.makedirs(r"C:\Users\Never\Desktop\aa\bb")  # 创建多级目录

删除

os.remove('d:\\books\\book\\book.txt') # 删除文件
os.rmdir('d:\hmm')     # 删除一级目录
os.removedirs('d:\\books\\book') # 删除多级目录;注意:要删除的目录必须是空目录,即目录没有文件
shutil.rmtree(folder_path)    # 删除整个目录,包括所有文件和子目录

复制

shutil.copy(src, dst)        # 不仅会复制文件,还会复制文件权限
shutil.copyfile(src, dst)        # 复制文件
shutil.copytree(src, dst)  # 复制文件夹

os.walk(path):遍历目录

其参数path 为要遍历的目录,返回一个三元素的元组  (root, dirs, files)

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹所有的文件夹的名字
  • files 同样是 list , 内容是该文件夹所有的文件

如果我们有如下的文件结构:

for (root, dirs, files) in os.walk('a'):
    # 当前要遍历的根目录为 a
    所以 root == 'a'
         dirs == [ 'b', 'c', 'd']
         files == [ '4.txt', '5.txt']

    # ------ 接着遍历 dirs 中的每一个目录 ------ #
    ### 遍历 b
    b:  root  = 'a\\b'              # 要遍历的目录 b
        dirs  = []                  # 遍历目录中的文件夹
        files = [ '1.txt', '2.txt'] # 遍历目录中的文件
    
    # dirs为空,返回
    ### 遍历 c
    c:  root  = 'a\\c'              # 要遍历的目录 c
        dirs  = []                  # 遍历目录中的文件夹
        files = [ '3.txt' ]         # 遍历目录中的文件
    
    PS : 如果想获取文件的全路径,只需要 
    for f in files:
        path = os.path.join(root,f)
    
    ### 遍历 d
    d:  root  = 'a\\b'              # 要遍历的目录 d
        dirs  = []                  # 遍历目录中的文件夹
        files = []                  # 遍历目录中的文件

    # 遍历完毕,退出循环

综合使用

列出一个文件夹中的所有音频文件,把文件名存储到列表中,这段代码经常会用到

wav_list = []
for root, dirnames, filenames in os.walk("./VCTK/p225"):
    for filename in fnmatch.filter(filenames, "*.wav"):     # 实现列表特殊字符的过滤或筛选,返回符合匹配“.wav”字符列表
        wav_list.append(os.path.join(root, filename))
print(wav_list)
# ['./VCTK/p225\\p225_001.wav', '/VCTK/p225\\p225_002.wav',...

glob模块

  glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,

支持通配符操作   [ ]   这三个通配符,代表0个或多个字符,? 代表一个字符,[ ] 匹配指定范围内的字符,如[0-9]匹配数字。

glob.glob("字符串+通配符")

该方法返回指定路径所有匹配的 文件的路径列表,该方法需要一个参数用来指定匹配的路径字符串(本字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。

glob.glob(r'c:\*.txt')      返回C盘下的所有txt文件路径列表

glob.glob(r'E:\pic\*\*.jpg')      返回指定目录下的所有jpg文件路径列表

glob.glob(r'../*.py')       返回上一层路径下的所有.py文件路径列表

fnmatch模块

此模块的主要作用是文件名称的匹配,fnmatch有2个比较常用的方法:fnmatchfilter

字符 含义
* 匹配所有字符
匹配单个字符
[seq] 匹配指定范围内的字符
[!seq] 匹配不在指定范围内的字符

fnmatch.fnmatch(filename, patten)  测试filename,是否符合pattern

import fnmatch
import os
for file in os.listdir('.'): #os.listdir返回指定的文件夹包含的文件或文件夹的名字的列表
    if fnmatch.fnmatch(file, '*.py'): #判断是否有后缀为.py的文件,*代表文件名长度格式不限制。
       print(file)

fnmatch.filter(names, pattern)    实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表

import fnmatch
filelist=["a.text","b.jpg","c.png","d.py",'e.text',"sss.py"]
print(fnmatch.filter(filelist,"?.py")) # 匹配前面是一个字符的.py文件
# 输出:d.py

 

 
posted @ 2019-07-01 09:59  凌逆战  阅读(2186)  评论(0编辑  收藏  举报