OS模块下我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用
同样,用几道小题来练练手。
1.编写一个程序,统计当前目录下每个文件类型的文件数
import os
all_files = os.listdir(os.curdir) #os.curdir指代当前目录('.') listdir列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录)
type_dict = dict()
for each in all_files:
if os.path.isdir(each): # 判断指定路径是否存在且是一个目录
type_dict.setdefault('文件夹', 0) #如果键不存在于字典中,将会添加键并将值设置为默认值
type_dict['文件夹'] += 1
else:
ex = os.path.splitext(each)[1] #分离文件名与扩展名 [0]文件名,[1]扩展名
type_dict.setdefault(ex, 0)
type_dict[ex] += 1
for each in type_dict.keys():
print('该文件夹下共有类型为[%s]的文件%d个。' %(each, type_dict[each]))
2.编写一个程序,计算当前文件夹下所有文件的大小
import os
all_files = os.listdir(os.curdir)
file_dict = dict()
for each in all_files:
if os.path.isfile(each): #判断指定路径是否存在且是一个文件
file_size = os.path.getsize(each)
file_dict[each] = file_size
for each in file_dict.items():
print('%s [%dBytes]' %(each[0], each[1]))
3.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索
import os
def search_file(start_dir, road):
os.chdir(start_dir) # 改变工作目录
all_files = os.listdir(os.curdir)
for each in all_files:
if each == road:
print(os.getcwd() + os.sep + each) # getcwd返回当前工作目录 sep输出操作系统特都不发的路径分隔符
if os.path.isdir(each): #判断指定路径是否存在且是一个目录
search_file(each, road)
os.chdir(os.pardir) #递归调用后记得返回上一级目录
start_dir = input('请输入待查找的初始目录:')
road = input('请输入要查找的目标文件:')
search_file(start_dir, road)
4.编写一个程序,输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(mp4,rmvb,avi),并把创建一个文件(vediolist.txt)存放所有找到的文件的路径。
import os
def search_file(start_dir, road):
os.chdir(start_dir) # 改变工作目录
all_files = os.listdir(os.curdir)
for each in all_files:
ex = os.path.splitext(each)[1]
if ex in road:
vedio_list.append(os.getcwd() + each + os.linesep) #当前平台使用的行终止符
if os.path.isdir(each):
search_file(each, road)
os.chdir(os.pardir)
start_dir = input('请输入待查找的初始目录:')
road = ['.mp4', '.avi', '.rmvb']
vedio_list = []
search_file(start_dir, road)
f = open(os.getcwd() + os.sep + 'vediolist.txt', 'w')
f.writelines(vedio_list)
f.close()