欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python3 文件系统

程序员文章站 2022-08-09 23:43:09
今天学了python3 的文件系统,高大上啊~~~~ 1、os模块和 os.path模块 os模块中文件目录和函数的使用方法 os.path模块中关于路径常用的函数使用方法 分割文件名与路径,返回(f_path,f_name)形式的元组,如果都是目录,他也会将最后一个目录作为文件分离 ,且不会判断文 ......

今天学了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下为'\r\n' Linux下为'\n')
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)

Python3 文件系统

 

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)

Python3 文件系统

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)

Python3 文件系统

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+'\n')
                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

 

Python3 文件系统

 

 

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()   
    

Python3 文件系统