零基础学习Python 作业 第30章
2018-03-27 12:06
309 查看
============ CH30 homework ============
0 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:
code
1 编写一个程序,计算当前文件夹下所有文件的大小,程序实现如下图:
2 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如果遇到文件夹,则进入文件夹继续搜索,程序实现如下图:
code
3 编写一个程序,用户输入开始搜索路径,查找该路径下(包含子文件夹)所有视频格式文件(要求查找mp4,rmvb,avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件路径,程序实现如下图:
code
4 编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt),要求显示该文件所在位置及关键字在文件中的具体位置(第几行第几个字符),程序实现如下图所示:
code
0 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:
>>> 该文件夹下共有类型为[.txt]的文件 1 个 该文件夹下共有类型为[.png]的文件 2 个 该文件夹下共有类型为[.py]的文件 3 个 该文件夹下共有类型为[.docx]的文件 2 个 该文件夹下共有类型为[文件夹]的文件 2 个
code
import os # 1 判断一个路径(目录或文件)是否存在 # b = os.path.exists('Your path') # # 2 判断一个路径是否是文件 # b = os.path.isfile('Your path') # # 3 判断一个路径是否目录 # b = os.path.isdir('Your path') # # 4获取某目录中的文件及子目录的列表 # L = os.listdir('Your path') # # 4 e.g # # def getDirList( p ): # p = str( p ) # if p == '': # return [] # p = p.replace('/', '\\') # if p[-1] != '\\': # p = p + '\\' # a.os.listdir(p) # b = [x for x in a if os.path.isdir(p+x)] # return b # print getDirList('D:\\') # # def getFileList( p ): # p = str( p ) # if p=="": # return [ ] # p = p.replace( "/","\\") # if p[ -1] != "\\": # p = p+"\\" # a = os.listdir( p ) # b = [ x for x in a if os.path.isfile( p + x ) ] # return b # print getFileList( "C:\\" ) # # 5 创建子目录 # os.makedirs( path ) # # 6 删除子目录 # os.rmdir( path ) # # 7 文件改名 # os.name(oldfileName, newFilename) # # Python 字典 setdefault() 函数和get() 方法类似 # dict.setdefault(key, default=None) # os.listdir(os.curdir) all_files = os.listdir('D:\\Learn\\Python project\\CH30 homework') type_dict = dict() for each_file in all_files: if os.path.isdir(each_file): # 如果类型字典中没有,则添加Key并设置默认值为0 type_dict.setdefault('文件夹', 0) type_dict['文件夹'] += 1 else: ext = each_file.split('.')[1] # 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])) # print('该文件夹下共有类型[%s]的文件 %d 个' % (each_type, type_dict[each_type])) # Result 该文件夹下共有类型[.pkl]的文件 1 个 该文件夹下共有类型[.md]的文件 2 个 该文件夹下共有类型[.py]的文件 2 个 >>>
1 编写一个程序,计算当前文件夹下所有文件的大小,程序实现如下图:
>>> 0.png [8450Bytes] vedioList.txt [503Bytes] 2.png [6791Bytes]
import os # os.path.getsize() # os.curdir 代指当前目录 all_files = os.listdir(os.curdir) file_dict = dict() for each_file in all_files: # os.path.isfile() 判断文件夹中的内容是否是文件 if os.path.isfile(each_file): # 计算文件大小 file_size = os.path.getsize(each_file) file_dict[each_file] = file_size # python字典的items方法作用:是可以将字典中的所有项,以列表方式返回。如果对字典项的概念不理解,可以查看Python映射类型字典基础知识一文。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。 for each in file_dict.items(): print('%s [%dBytes]' % (each[0], int(each[1]))) # Result my_list.pkl [57Bytes] suffixSum.py [1775Bytes] test.py [272Bytes] note.md [308Bytes] computeFileSize.py [682Bytes] homework.md [2582Bytes]
2 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如果遇到文件夹,则进入文件夹继续搜索,程序实现如下图:
>>> 请输入待查找的初始目录: E:\\TestFolder 请输入需要查找的文件名: 测试3.txt E:\TestFolder\SubFolder1\测试3.txt E:\TestFolder\SubFolder2\测试3.txt >>>
code
import os def search_file(file_path, file_name): # 改变当前工作目录到指定的路径file_path os.chdir(file_path) allfile = os.listdir(os.curdir) for each_file in allfile: if each_file == file_name: # os.getcwd() 获取当前each_file的路径 # os.sep() 可以取代操作系统特定的路径分割符 print(os.getcwd() + os.sep + each_file) if os.path.isdir(each_file): search_file(each_file, file_name) # os.chdir() 改变当前目录为新的目录 # os.pardir() windows中指切换到上一级目录 os.chdir(os.pardir) file_path = input('请输入待查找的初始目录: ') while not os.path.exists(file_path): print('目录不存在!') file_path = input('请输入待查找的初始目录: ') file_name = input('请输入需要查找的目标文件: ') search_file(file_path, file_name) #Result 请输入待查找的初始目录: D:\Learn 请输入需要查找的目标文件: homework.md D:\Learn\Python project\CH10 homework\homework.md D:\Learn\Python project\CH11-12 homework\homework.md D:\Learn\Python project\CH13 homework\homework.md D:\Learn\Python project\CH14 homework\homework.md D:\Learn\Python project\CH15 homework\homework.md D:\Learn\Python project\CH16 homework\homework.md D:\Learn\Python project\CH17 homework\homework.md D:\Learn\Python project\CH18 homework\homework.md D:\Learn\Python project\CH19 homework\homework.md D:\Learn\Python project\CH20 homework\homework.md D:\Learn\Python project\CH21 homework\homework.md D:\Learn\Python project\CH22 homework\homework.md D:\Learn\Python project\CH23-24 homework\homework.md D:\Learn\Python project\CH25 homework\homework.md D:\Learn\Python project\CH26 homework\homework.md D:\Learn\Python project\CH27 homework\homework.md D:\Learn\Python project\CH28 homework\homework.md D:\Learn\Python project\CH29 homework\homework.md D:\Learn\Python project\CH30 homework\homework.md >>>
3 编写一个程序,用户输入开始搜索路径,查找该路径下(包含子文件夹)所有视频格式文件(要求查找mp4,rmvb,avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件路径,程序实现如下图:
>>> 请输入待查找的初始目录: J:\\OL系列 -------------------------------------- J:\OL系列\xxx.avi --------------------------------------
code
import os def videoCount(file_path, target): os.chdir(file_path) allfile = os.listdir(os.curdir) for each_file in allfile: ext = os.path.splitext(each_file)[1] if ext in target: # os.linesep:给出当前平台的行终止符 video_list.append(os.getcwd() + os.sep + each_file + os.linesep) if os.path.isdir(each_file): videoCount(each_file, target) os.chdir(os.pardir) file_path = input('请输入待查找的初始目录: ') while not os.path.exists(file_path): print('目录不存在!') file_path = input('请输入待查找的初始目录: ') program_dir = os.getcwd() target = ['.avi', '.mp4', '.rmvb'] video_list = [] videoCount(file_path, target) f = open(program_dir + os.sep + 'videolist.txt', 'w') f.writelines(video_list) f.close()
4 编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt),要求显示该文件所在位置及关键字在文件中的具体位置(第几行第几个字符),程序实现如下图所示:
>>> 请将该脚本放于待查找的文件夹内,请输入关键字: 小甲鱼 请问是否需要打印关键字[小甲鱼]在文件中的具体位置(YES/NO): yes ====================================================== 在文件[E:\TestFolder\test.txt]中找到关键字: [小甲鱼] 关键字出现在第13行,第[3,10,18]位置
code
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: 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_dict = dict() for each_line in f: count += 1 if key in each_line: # 统计行中的具体位置 pos = pos_in_line(each_line, key) # count 为对应的行号作为关键字 key_dict[count] = pos f.close() return key_dict def search_files(key, detail): # os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) # top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。 # topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。 # onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。 # followlinks -- 设置为 true,则通过软链接访问目录。 all_files = os.walk(os.getcwd()) # 设置一个列表存储.txt的路径 txt_files = [] for i in all_files: # i[0] dirpath, i[1] dirnames, i[2] filenames for each_file in i[2]: if os.path.splitext(each_file)[1] == '.txt': 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', 'Y', 'y']: print_pos(key_dict) key = input('请将脚本放于待查找的文件夹内,请输入关键字: ') detail = input('请问是否需要打印关键字[%s]在文件中的具体位置(YES/NO): ' % key) search_files(key, detail)
相关文章推荐
- 零基础学习Python 作业 第1章
- 零基础学习Python 作业 第28章
- 零基础学习Python 作业 第7-8章
- 零基础学习Python 作业 第18章
- 零基础学习Python 作业 第4章
- python基础学习小作业(一)
- 零基础学习Python 作业 第20章
- 零基础学习Python 作业 第11-12章
- 零基础学习Python 作业 第13章
- 零基础学习Python 作业 第22章
- 零基础学习Python 作业 第2章
- 零基础学习Python 作业 第19章
- 零基础学习Python 作业 第10章
- 零基础学习Python 作业 第21章
- 零基础学习Python 作业 第23-24章
- Python零基础学习 问题及作业 问题待续
- 零基础学习Python 作业 第15章
- 零基础学习Python 作业 第5章
- 零基础学习Python 作业 第14章
- 零基础学习Python 作业 第25章