小甲鱼Python第030讲文件系统:介绍一个高大上的东西 | 课后测试题及参考答案
0.编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:
代码实现:
import os # 使用os.curdir表示当前目录更标准 all_files = os.listdir(os.curdir) type_dict = dict() for each_file in all_files: if os.path.isdir(each_file): # get()返回指定键的值,如果值不在字典中返回default值. # setdefault()和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default type_dict.setdefault(‘文件夹‘,0) type_dict[‘文件夹‘] += 1 else: ext = os.path.splitext(each_file)[1] type_dict.setdefault(ext,0) type_dict[ext] += 1 for each_type in type_dict.keys(): print("该文件夹下共有类型为【%s】的文件%d个" % (each_type,type_dict[each_type]))
1.编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图:
实现代码:
import os all_files = os.listdir(os.curdir) file_dict = dict() for each_file in all_files: if os.path.isfile(each_file): file_size = os.path.getsize(each_file) file_dict[each_file] = file_size for each in file_dict.items(): print(‘%s 【%dBytes】‘ % (each[0],each[1]))
2.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:
实现代码:
import os def search_file(file_mulu,aim_file): # 改变目录 os.chdir(file_mulu) for each_file in os.listdir(os.curdir): if each_file == aim_file: # 使用OS表达路径更准确# os.getcwd()返回当前目录# os.sep按照系统输出相应的分隔符 print(os.getcwd() + os.sep + each_file) if os.path.isdir(each_file): # 递归调用 search_file(each_file,aim_file) # 递归调用后返回上一层目录 os.chdir(os.pardir) file_mulu = input("请输入待查找的初始目录:") aim_file = input("请输入需要查找的目标文件:") search_file(file_mulu,aim_file)
3.编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找MP4,RMVB,AVI的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:
实现代码:
import os def search_file(file_mulu,file_aim): # 更改工作路径 os.chdir(file_mulu) # os.listdir(os.curdir) 列举指定文件的文件名 for each_file in os.listdir(os.curdir): # 分离文件名与扩展名,返回(f_name, f_extension)元组从0开始 ext = os.path.splitext(each_file)[1] if ext in file_aim: vedio_list.append(os.getcwd()+os.sep+each_file+os.linesep) # os.path.isdir()判断指定路径是否存在且是一个目录 if os.path.isdir(each_file): search_file(each_file,file_aim) os.chdir(os.pardir) file_mulu = input("请输入待查找的初始目录:") program_dir = os.getcwd() vedio_list = [] file_aim = [‘.mp4‘,‘.avi‘,‘.rmvb‘] search_file(file_mulu,file_aim) f = open(program_dir + os.sep + ‘vedioList.txt‘,"w") f.writelines(vedio_list) f.close()
4.编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:
实现代码:
# 没看懂~ import os def print_pos(key_dict): keys = key_dict.keys() # 由于字典是无序的,我们这里对行数进行排序 keys = sorted(keys) for each_key in keys: print(‘关键字出现在第%s行,第%s个位置。‘ % (each_key , str(key_dict[each_key]))) def pos_in_line(line,key): pos = [] begin = line.find(key) while begin != -1: # 在用户角度是从1 开始 pos.append(begin+1) # 从下一个位置继续查找 begin = line.find(key,begin +1) return pos def search_in_file(file_name,key): f = open(file_name) # 记录行数 count = 0 # 字典,用户存放key所在具体行数对应具体位置 key_dict = dict() for each_line in f: count +=1 if key in each_line: pos = pos_in_line(each_line,key) key_dict[count] = pos f.close() return key_dict def search_files(key,detail): all_files = os.walk(os.getcwd()) txt_files = [] for i in all_files: for each_file in i[2]: # 根据后缀判断是不是文本文件 if os.path.splitext(each_file)[1] == ".txt": each_file = os.path.join(i[0],each_file) txt_files.append(each_file) for each_txt_file in txt_files: key_dict = search_in_file(each_txt_file,key) if key_dict: print("======================================") print("在文件【%s】中找到关键字【%s】" % (each_txt_file.key)) if detail in [‘Yes‘,"YES","yes"]: print_pos(key_dict) key = input("请将该脚本放于待查找的文件夹内,请输入关键字:") detail = input("请问是否需要打印关键字【%s】在文件中的额具体位置(YES/No):" %key) search_files(key,detail)
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16