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 |
| 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=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()
相关推荐
云中舞步 2020-11-12
杨德龙 2020-11-11
JohnYork 2020-10-16
wangzhaotongalex 2020-09-22
xiaoseyihe 2020-11-16
Crazyshark 2020-11-13
K先生 2020-11-10
思君夜未眠 2020-09-04
点滴技术生活 2020-08-21
MaggieRose 2020-08-19
kevinweijc 2020-08-18
wintershii 2020-08-17
vapaad 2020-08-17
wera00 2020-08-17
移动开发与培训 2020-08-16
ReunionIsland 2020-08-16
JimyFengqi 2020-08-16