小甲鱼Python第030讲文件系统:介绍一个高大上的东西 | 课后测试题及参考答案

0.编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:

代码实现:

 1 import os
 2 # 使用os.curdir表示当前目录更标准
 3 all_files = os.listdir(os.curdir)
 4 type_dict = dict()
 5 
 6 for each_file in all_files:
 7     if os.path.isdir(each_file):
 8         # get()返回指定键的值,如果值不在字典中返回default值.
 9         # setdefault()和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
10         type_dict.setdefault('文件夹',0)
11         type_dict['文件夹'] += 1
12     else:
13         ext = os.path.splitext(each_file)[1]
14         type_dict.setdefault(ext,0)
15         type_dict[ext] += 1
16 
17 for each_type in type_dict.keys():
18     print("该文件夹下共有类型为【%s】的文件%d个" % (each_type,type_dict[each_type]))

 

 1.编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图:

实现代码:

 1 import os
 2 all_files = os.listdir(os.curdir)
 3 file_dict = dict()
 4 
 5 for each_file in all_files:
 6     if os.path.isfile(each_file):
 7         file_size = os.path.getsize(each_file)
 8         file_dict[each_file] = file_size
 9 for each in file_dict.items():
10     print('%s 【%dBytes】' % (each[0],each[1]))

2.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:

实现代码:

 1 import os
 2 def search_file(file_mulu,aim_file):
 3     # 改变目录
 4     os.chdir(file_mulu)
 5     for each_file in os.listdir(os.curdir):
 6         if each_file == aim_file:
 7             # 使用OS表达路径更准确# os.getcwd()返回当前目录# os.sep按照系统输出相应的分隔符
 8             print(os.getcwd() + os.sep + each_file)      
 9         if os.path.isdir(each_file):
10             # 递归调用
11             search_file(each_file,aim_file)
12             # 递归调用后返回上一层目录
13             os.chdir(os.pardir)
14 file_mulu = input("请输入待查找的初始目录:")
15 aim_file = input("请输入需要查找的目标文件:")
16 search_file(file_mulu,aim_file)

 

 3.编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找MP4,RMVB,AVI的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实现代码:

 1 import os
 2 
 3 def search_file(file_mulu,file_aim):
 4     # 更改工作路径
 5     os.chdir(file_mulu)
 6     # os.listdir(os.curdir) 列举指定文件的文件名
 7     for each_file in os.listdir(os.curdir):
 8         # 分离文件名与扩展名,返回(f_name, f_extension)元组从0开始
 9         ext = os.path.splitext(each_file)[1]
10         if ext in file_aim:
11             vedio_list.append(os.getcwd()+os.sep+each_file+os.linesep)
12         # os.path.isdir()判断指定路径是否存在且是一个目录
13         if os.path.isdir(each_file):
14             search_file(each_file,file_aim)
15             os.chdir(os.pardir)
16 file_mulu  = input("请输入待查找的初始目录:")
17 program_dir = os.getcwd()
18 vedio_list = []
19 file_aim = ['.mp4','.avi','.rmvb']
20 
21 search_file(file_mulu,file_aim)
22 
23 f = open(program_dir + os.sep + 'vedioList.txt',"w")
24 f.writelines(vedio_list)
25 f.close()

 

4.编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:

 实现代码:

 1 # 没看懂~
 2 import os
 3 def print_pos(key_dict):
 4     keys = key_dict.keys()
 5     # 由于字典是无序的,我们这里对行数进行排序
 6     keys = sorted(keys)
 7     for each_key in keys:
 8         print('关键字出现在第%s行,第%s个位置。' % (each_key , str(key_dict[each_key])))
 9 
10 def pos_in_line(line,key):
11     pos = []
12     begin = line.find(key)
13     while begin != -1:
14         # 在用户角度是从1 开始
15         pos.append(begin+1)
16         # 从下一个位置继续查找
17         begin = line.find(key,begin +1)
18     return pos
19 
20 def search_in_file(file_name,key):
21     f = open(file_name)
22     # 记录行数
23     count = 0
24     # 字典,用户存放key所在具体行数对应具体位置
25     key_dict = dict()
26 
27     for each_line in f:
28         count +=1
29         if key in each_line:
30             
31             pos = pos_in_line(each_line,key)
32             key_dict[count] = pos
33     f.close()
34     return key_dict
35 
36 def search_files(key,detail):
37     all_files = os.walk(os.getcwd())
38     txt_files = []
39     for i in all_files:
40         for each_file in i[2]:
41             # 根据后缀判断是不是文本文件
42             if os.path.splitext(each_file)[1] == ".txt":
43                 each_file = os.path.join(i[0],each_file)
44                 txt_files.append(each_file)
45     for each_txt_file in txt_files:
46         key_dict = search_in_file(each_txt_file,key)
47         if key_dict:
48             print("======================================")
49             print("在文件【%s】中找到关键字【%s】" % (each_txt_file.key))
50             if detail in ['Yes',"YES","yes"]:
51                 print_pos(key_dict)
52 key = input("请将该脚本放于待查找的文件夹内,请输入关键字:")
53 detail = input("请问是否需要打印关键字【%s】在文件中的额具体位置(YES/No):" %key)
54 search_files(key,detail)
posted @ 2020-07-18 17:09  逆袭小白  阅读(494)  评论(0编辑  收藏  举报