0. 编写一个程序,统计当前目录下每个文件类型的文件数。
9
代码清单:
import os #导入os模块
all_files = os.listdir(os.curdir) #listdir列出当前目录所有文件名,curdir指定当前目录
type_dict = dict()
for each_file in all_files:
if os.path.isdir(each_file): #判断指定路径是否存在且是一个目录
type_dict.setdefault('文件夹', 0) #如果键不存在于字典中,将会添加键并将值设置为0
type_dict['文件夹'] += 1 #统计当前目录下文件夹个数
else:
ext = os.path.splitext(each_file)[1]#等ext于这个元组中的第二个元素,即ext是扩展名
type_dict.setdefault(ext, 0)
type_dict[ext] += 1
for each_type in type_dict.keys(): #each_type等于字典type_dict返回的键,在这里是文件夹或扩展名
print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict[each_type]))
#思路分析:
1、把指针指定在当前目录,列出所有目录下的文件名;用dict()函数创建一个字典,赋值给type_dict。
2、for循环遍历当前目录所有文件名,判断当前文件是否是文件夹:
是:创建字典默认值,并且字典里唯一的键(key)‘文件夹’的值'0'自增1,此步骤用于统计文件夹数量。
否:用splittext分离文件名和后缀名,把后缀名指定给ext变量,创建字典默认值,ext(后缀名=文件类型)对应键的值自增1,此步骤用于统计文件类型数量。
3、for循环遍历type_dict的键,打印出来键和键所对应的值。
1. 编写一个程序,计算当前文件夹下所有文件的大小。
&58Iqs$g"
G|C1k=+#)w2Jz3X}L*W F?&>ve0I6
代码清单:
import os
all_files = os.listdir(os.curdir) #列举指定目录中的文件名,os.curdir表示当前目录
type_dict = dict()
for each_file in all_files:
if os.path.isfile(each_file): #for循环遍历当前目录所有文件名,判断当前文件是否是文件
file_size = os.path.getsize(each_file) #返回指定文件的尺寸,单位是字节
print(each_file)
type_dict[each_file] = file_size #统计文件大小,将其赋值给字典中[each_file]键对应的值
#for each_type in type_dict.items():
# print('%s【%dBytes】' % (each_type[0], each_type[1]))
#for each_type in type_dict.keys():
# print('%s【%dBytes】' % (each_type, type_dict[each_type]))
for key,value in type_dict.items():
print('%s【%dBytes】' % (key, value))
#1. 编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图:
#思路分析:
1、把指针指定在当前目录,列出所有目录下的文件名,赋值给变量all_files;创建一个空字典。
2、for循环遍历当前目录所有文件名,判断当前文件是否是文件:
是:统计文件大小,将其赋值给字典中[each_file]键对应的值。
3、for循环遍历file_dict.items,打印出来键和键所对应的值。
2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:
Mu0m?
{$}[#tz=l Nd1*5:H^&k%v@ro
代码清单:P
import os
def search_file(dir_name, target_file):
os.chdir(dir_name) #改变工作目录
all_files = os.listdir(os.curdir)
for each_file in all_files:
if each_file == target_file:
print(os.getcwd() + os.sep + each_file) #getcwd返回当前工作目录 sep输出操作系统路径分隔符
if os.path.isdir(each_file):
search_file(each_file, target_file) #递归调用,递归调用后切记返回上一层目录
os.chdir(os.pardir)#os.pardir代表上级目录,本命令代表跳转到上级目录
dir_name = input('please input need seek dir:')
target_file = input('please input need seek target file:')
search_file(dir_name, target_file)
#2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索
#思路分析:
1、定义一个函数,两个形参,改变当前目录为用户Input输入目录。
2、for循环遍历当前用户输入目录下所有文件名:
A、如果each_file和用户输入文件名相比较,名字相等,打印当前目录+分隔符+当前文件名;
B、如果each_file循环到的是个文件夹的话,调用递归,再次搜索目标文件,返回上一级目录。
*:这里为何要返回上一级的目的一是为了防止文件夹是个空文件夹,没有目标文件,二是为了防止例如三级和四级目录下有相同目标文件的情况。
跳出递归的关键是,递归到each_file是文件的时候,就不会调用递归(当前目录下只有一个文件,没有文件夹)。
这个时候肯定要返回上一级目录,进行下一次文件和文件夹的判断。
#A目录下有B、C两个子目录, B、C下无子目录:..\A\B, ..A\C
‘比如:A目录下有子目录B 和 C。进入A目录后,发现B目录,触发递归,执行完毕后,通过os.chdir(os.pardir)返回A目录 ,然后发现C目录,触发递归,执行完毕后,通过os.chdir(os.pardir)返回A目录 。’
如果B下有子目录b,那顺序为:进入A目录后,发现B目录,触发递归(此处叫递归1),接着发现目录b,再次触发递归(此处叫递归2),递归2结束后,通过os.chdir(os.pardir)返回目录B,递归1结束后,通过os.chdir(os.pardir)返回目录A
#第一:一定要记住一点,递归就是先递进后回归,有去有回才能正确执行;
第二:每次进入子目录后,都会将其变更为工作目录,所以执行完搜索后你不退回到父级目录就不会遍历所有文件夹啊
#举个例子,假设你的开始目录为文件夹A,里面有且仅有一个文件夹B和目标文件1.txt,B内无任何文件或文件夹。此时程序从B文件夹查找,并且通过递归函数查询B文件夹内部。
由于B文件夹内没有任何文件(自然也没有目标文件),所以没有任何输出结果,此时程序自然走到'os.chdir(os.pardir) # 递归调用后切记返回上一层目录',
当前工作目录从B文件夹返回到上一级A文件夹,此时再进行查询,才能找到1.txt,程序结束
3. 编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4 rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:D
v)-"'(1
*ZTYCH^FK<1SNR)E!r6u?,lah~q3L5
代码清单:来
import os
def search_file(start_dir, target) :
os.chdir(start_dir) # 当前工作目录,即Python的目录(还没执行函数)
for each_file in os.listdir(os.curdir) :
ext = os.path.splitext(each_file)[1]
if ext in target :
vedio_list.append(os.getcwd() + os.sep + each_file + os.linesep)
#os.linesep是标准换行符
if os.path.isdir(each_file) :
search_file(each_file, target) # 递归调用
os.chdir(os.pardir) # 递归调用后切记返回上一层目录
start_dir = input('请输入待查找的初始目录:')
project_dir = os.getcwd() #当前目录是本.py的位置,应该是为了将'vediolist.txt'也保存在该路径
#print(os.getcwd()) 输出结果显示为
#请输入待查找的初始目录:D:\文件\动漫
#D:\Program Files\python_xiaojiayu
target = ['.mp4', '.avi', '.rmvb']
vedio_list = []
search_file(start_dir, target) #运行函数,函数内部改变目录到start_dir,结束运行时在start_dir
#print(os.getcwd()) 输出结果显示为
#请输入待查找的初始目录:D:\文件\动漫
#D:\文件\动漫
#f = open(os.getcwd() + os.sep + 'vediolist.txt', 'w', encoding='utf-8')
f = open(project_dir + os.sep + 'vediolist.txt', 'w', encoding='utf-8')
#open使用了绝对路径,所以无论当前目录在哪里,vediolist.txt都会在program_dir下。
f.writelines(vedio_list)
f.close()
4. 编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:+
uR5cC=
x?u+z>OJ(Y3o*{6qGeavf<d
代码清单: