• Python3 文件系统


    今天学了python3 的文件系统,高大上啊~~~~

    1、os模块和 os.path模块

    os模块中文件目录和函数的使用方法

    函数 使用方法
    getcwd() 返回当前工作目录
    chdir(path) 改变工作目录
    listdir(path='.') 列举指定目录中的文件名(‘.’表示当前陌路‘..’表示上一级目录)
    mkdir(path) 创建单层目录,如果目录已存在则抛出异常
    makedirs(path) 创建多层目录,如果目录已存在则抛出异常 注意:E:\a\c和E:\a\b不会冲突
    remove(path) 删除文件
    rmdir(path) 删除单层目录,如果该目录非空则抛出异常
    removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
    rename(old,new) 将文件old重命名为new
    system(commend) 运行系统的shell命令
    walk(top) 遍历top路径以下所有的子目录,返回一个三元组(路径,[包含目录],[包含文件])
      以下是支持路径操作中常用到的一些定义,支持所有平台
    os.curdir 指代当前目录'.' 用os.curdir表示当前目录更准确(怡红院来者不拒哈哈哈)
    os.pardir 指代上一级目录‘..’
    os.sep 输出操作系统特定的路径分割符(WIN下为'\'Linux下为'/')
    os.linesep 当前操作系统下的行终止符(win下为' ' Linux下为' ')
    os.name 指代当前的操作系统(‘posix’ ‘nt’ ‘mac’ ‘os2’ ‘ce’ ‘java’)打到这到这觉得Python好好用...

    os.path模块中关于路径常用的函数使用方法

    函数名 使用方法
    basename(path) 去掉目录路径单独返回文件名
    dirname(path) 去掉文件名单独返回目录路径
    join(path1[,path[,...]]) 将path1和path2各部分组合成一个路径名
    split(path)

    分割文件名与路径,返回(f_path,f_name)形式的元组,如果都是目录,他也会将最后一个目录作为文件分离

    ,且不会判断文件或者目录是否存在

    splitext(path) 分离文件名和扩展名返回(f_name,f_ext)形式的元组

    >>> import os
    >>> os.path.splitext('boy_1.txt')
    ('boy_1', '.txt')

     getsize(file)  返回指定文件尺寸,大小为字节
     getatime(file)  返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()和localtime()转换)
     getctime(file)  返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()和localtime()转换)
     getmtime(file)  返回指定文件最新修改时间(浮点型秒数,可用time模块的gmtime()和localtime()转换)
       以下函数返回True or False
     exists(path)  判定指定路径(文件或目录)是否存在
     isabs(path)  判断路径是否为绝对路径 绝对路径:E:\A\B\text.txt 相对路径:A\B\text.tx
     isdir(path)  判断路径是否存在且一个目录
     isfile(path)  判断路径是否存在且是一个文件
     islink(path)  判断路径是否存在且是一个符号链接
     ismount(path)  判断路径是否存在且是一个挂载点 :E:\ C:\
     samefile(path1,path2)  判断两个路径是否指向同一个文件

     

     例题:

    1、统计当前目录下每个文件类型个数(改进版)

    import os
    c=os.getcwd()
    name_in_file=os.listdir(c)
    
    def count_filetype(name):
        count=0
        content=[]#用来存储该路径下所有扩展名    
        for each_name in name_in_file:
            Suffix=os.path.splitext(each_name)
            content.append(Suffix[1])
        type_count=set(content)#集合里的元素是唯一的,这样就可以把相同的扩展名去掉得到文件含有的扩展名
        #print(type_count)       
        for Extension in type_count:
            for Splited_Ext in content:
                if Extension == Splited_Ext:
                    if Extension=='':
                        Extension='文件夹' 
                    count+=1
            print('该文件夹下共有类型为【%s】的文件 %d 个'%(Extension,count))
            count=0#统计完一次计数器清零
        return 1
    
    
    count_filetype(name_in_file)

     

    2、输入文件名搜索指定文件夹是否存在该文件

    import os
    def Find_Aim_File(path,file_name):
        os.chdir(path)#1.改变工作路径
        container = os.walk(os.getcwd())#2.获取当前工作路径,3.遍历该路径下所有子目录
        for each in container:
            for each_name in each[2]:
                if each_name == file_name:
                    print(each[0]+os.sep+each_name)
                
                
        
        
    
    Initial_direct=input('请输入查找的初始目录:')
    Target_File=input('请输入需要查找的目标文件:')
    Find_Aim_File(Initial_direct,Target_File)

    3、计算工作目录下各个文件的大小

    import os
    c=os.getcwd()#返回当前工作目录
    #使用os.curdir 表示当前目录更标准
    List_File_Nname=os.listdir(c)#列举该目录下的文件名,返回一个列表
    def Get_File_Size(list_file_name):
        for each_name in list_file_name:
            print("%s【%d Bytes】"%(each_name,os.path.getsize(each_name)))
            
    
    Get_File_Size(List_File_Nname)

    4、查找指定路径的视频文件,并保存路径为文本文档(AV没地方藏了doge脸)

    import os
    def Find_Vedio(directory,save_path):
        flag=0
        save_data=[]
        os.chdir(directory)#改变工作目录
        container=os.walk((os.getcwd()))#获取当前工作目录#遍历该目录下所有子目录
       
        for sub_directory in container:
            for each_file_name in sub_directory[2]:
                splited_file_name=os.path.splitext(each_file_name)#返回[文件名,扩展名]
                if splited_file_name[1] in ['.avi','.mp4','.rmvb']:
                    #vedio_name=(sub_directory[0]+'\'+each_file_name+'
    ')
                    vedio_name=(sub_directory[0]+os.sep+each_file_name+os.linesep)#改成这句使程序更标准
                    save_data.append(vedio_name)
                    print(vedio_name)
                    flag=1
    
        save_txt=open(save_path,'w')
        print('保存中.....')
        save_txt.writelines(save_data)
        save_txt.close()
        print('主人我已为你打包完毕~~')
         
        if flag==0:
            print('真是不看片的好小伙!居然找不到!!!')
    
            
    print('请输入待查找的初始目录:',end='')
    while 1:
        initial_directory = input()
        print('请输入保存路径(默认为【E:\vedioList.txt】):',end='')
        Savepath=input()
        if Savepath=='':
            Savepath='E:/vedioList.txt'
        if ':\' not in initial_directory and ':\'not in Savepath:
            print("格式错误请重新输入:",end='')
            continue
        else:
            print('查找中....')
            Find_Vedio(initial_directory,Savepath)
            print('感谢使用')
            break

    5、查找当前文件夹内文本文档内是否含有关键字并输出位置

    import os
    path=os.getcwd()
    container=os.walk(path)
    def find_txt(path):
        txt_name_container=[]#存放文本文件文件名
        
        for each_path in container:#each_path的格式为(路径,[包含目录],[包含文件])
            for each_file_name in each_path[2]:
                splited_name=os.path.splitext(each_file_name)#将文件名和扩展名拆分返回一个列表
                if splited_name[1]=='.txt':
                    #file_path=each_path[0]+'\'+each_file_name#得到文本文件路径
                    file_path=os.path.join(each_path[0],each_file_name)#上面这句话可以改成这一句
                    txt_name_container.append(file_path)#将文本文件路径存入列表            
        return txt_name_container
    
    
    
    def find_keyword(target_file_list,key_word,c):
        positions=[]
        flag=0
        for each_file_name in target_file_list:
            row=0
            txt_file=open(each_file_name)#以只读文本方式打开文件
            for each_line in txt_file:
                if key_word in each_line:
                    print('===================================================')
                    print('在文件【%s】中找到关键字【%s】'%(each_file_name,key_word))
                    flag=1
                    txt_file.close()
                    break
            if flag==0:
                print("没有在该文件夹中找到关键字!")
                break
            elif flag==1 and c in ['YES','yes','y','Y']: 
                txt_file=open(each_file_name)
                for each_line in txt_file:
                    end=len(each_line)
                    #print(end)
                    row+=1
                    for start in range(end):
                        p=(each_line.find(key_word,start,end)+1)
                        #print(p)
                        if p!=0 and p not in positions:
                            positions.append(p)
                    if positions :
                        
                        print('关键字出现在第%d行第%s个位置'%(row,positions))
                    
                    positions=[]
                txt_file.close()   
        

  • 相关阅读:
    signals系列之一——基本用法
    libevent系列之一——libevent介绍
    memcached完全剖析系列——一、memcached基础
    分布式算法一——一致性hash算法
    spring容器启动过程
    dubbo源码之四——服务发布二
    dubbo源码之四——dubbo服务发布
    dubbo源码之三——dubbo重构
    dubbo源码之三-模块依赖
    [模板](luogu P3387)縮點
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8401610.html
Copyright © 2020-2023  润新知