第30讲:文件系统:介绍一个高大上的东西

来源:互联网 发布:执行偏差算法含义 编辑:程序博客网 时间:2024/05/16 05:54

动动手:

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



答案:
import osprint('当前文件夹为:%s' % os.getcwd())all_files = os.listdir(os.curdir)       #listdir()-列举指定目录中的文件名,使用os.curdir指代当前目录type_dict = dict()          #创建一个字典for each_file in all_files:    if os.path.isdir(each_file):            #isdir判断指定路径是否存在且是一个目录        type_dict.setdefault('文件夹', 0)          #?这里不明白为什么每次循环不会初始化字典的值,而且还会做累加。        type_dict['文件夹'] += 1    else:        ext = os.path.splitext(each_file)[1]    #这里的分割是带点的,如:.txt        type_dict.setdefault(ext, 0)        type_dict[ext] += 1for each_type in type_dict.keys():    print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict[each_type]))

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



答案:

import osall_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       #相当于file_dict = {each_line:file_size} for each in file_dict.items():    print('%s【%dBytes】' % (each[0], each[1]))

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



答案:
import osdef search_file(start_dir, target):    os.chdir(start_dir)             #改变工作目录    for each_file in os.listdir(os.curdir):        if each_file == target:            print(os.getcwd() + os.sep + each_file)             #getcwd()返回当前目录||os.sep输出操作系统特定的路径分隔符(win下为'\\',linux下为'/')        if os.path.isdir(each_file):            search_file(each_file, target)      #递归调用            os.chdir(os.pardir)                     #指代上一级目录('..')start_dir = input('请输入待查找的初始目录:')target = input('请输入需要查找的目标文件:')search_file(start_dir, target)


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



答案:
import osdef search_file(start_dir, target):    os.chdir(start_dir)    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)        if os.path.isdir(each_file):            search_file(each_file, target)      #递归调用            os.chdir(os.pardir)                     #递归调用后切记返回上一层目录start_dir = input('请输入待查找的初始目录:')program_dir = os.getcwd()target = ['.mp4', '.avi', '.rmvb']vedio_list = []search_file(start_dir, target)f = open(program_dir + os.sep + 'vedioList.txt', 'w')       #在当前目录打开'vedioList.txt'f.writelines(vedio_list)f.close()


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



答案:
待填坑……



Notes:

1.这讲主要讲了:http://bbs.fishc.com/forum.php?mod=viewthread&tid=45512&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403 这个链接里的内容。

2.os模块
>>> os.chdir('E:\\') #要切换目录时,要带双引号,\\等于/>>> os.getcwd()'E:\\'>>> os.mkdir('E:\\A\\B') #要有A之后才能创建B>>> os.removedirs("E:/A/B/C") 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则停止删除,不抛出错误。>>> os.removedirs("E:/A/B") #要先给出最内层的目录>>> os.system('calc') #打开计算器

other:

>>> os.listdir(os.curdir)>>> os.listdir(os.pardir)


3.os.path模块



注意basename(path)、dirname(path)、join()、split()、splitext()方法是对路径进行操作(其实就是对你输入的路径字符串进行操作),不是去访问该路径下的文件;getsize()、getatime()、getctime()、getmtime()才是对路径文件进行操作。

引用时需要有os.path,比如:os.path.basename('E:/a/b/123.txt')

>>> os.path.join('C:/', 'b', 'c', 'd')    #join-将path1,path2各部分组合成一个路径名'C:/b\\c\\d'>>> os.path.split("E:/A/B/C")    #split类似于字符串的split,分割文件名和路径,返回一个元组。就如例子中的'C',假设是一个目录,但是返回时还是当作一个文件进行分割。('E:/A/B', 'C')os.path.getatime(file)-返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数进行换算,gmtime()是国际标准时)>>> os.path.getatime('E:/something.txt')1503312884.3365867    #浮点型秒数>>> import time>>> time.localtime(os.path.getatime("E:/something.txt"))    #这里是本地时间time.struct_time(tm_year=2017, tm_mon=8, tm_mday=21, tm_hour=18, tm_min=54, tm_sec=44, tm_wday=0, tm_yday=233, tm_isdst=0)https://zhidao.baidu.com/question/54621865.html    #相对路径和绝对路径的区别islink(path)-判断指定路径是否存在且是一个符号链接,符号链接就是快捷方式>>> os.path.ismount('E:/')    #判定指定路径是否是挂载点,挂载点就是指'A:/'或'C:/'或'D:/'True