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下为'\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)

 

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

 

 

 

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

 

posted @ 2018-02-02 00:58  消灭猕猴桃  阅读(336)  评论(0编辑  收藏  举报