动动手:
0.编写一个程序,统计当前目录下每个类型的文件数,程序实现如图:
答案:
import os
print('当前文件夹为:%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] += 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 #相当于file_dict = {each_line:file_size}
for each in file_dict.items():
print('%s【%dBytes】' % (each[0], each[1]))
2.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:
答案:
import os
def 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 os
def 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