对本机的所有的文件信息数据进行搜索和收集,绘制数据分布的直方图。
A、 文件大小分布的直方图
B、 文件创建时间和修改时间的直方图
C、 文件类型的直方图
import os #对文件操作的库函数
import time
import matplotlib.pyplot as plt #画直方图
from matplotlib.font_manager import FontProperties #对中文字体的识别
font=FontProperties(fname=r"C:\\Windows\Fonts\simhei.ttf",size=14)
path="e:\\"#对e盘进行数据收集
list1=[]
list2=[]
list3=[]
size1=[]
type1={}
ctime={}
mtime={}
num1=0
num2=0
num3=0
num4=0
num11=0
num22=0
num33=0
num44=0
#os.walk()方法有三个返回值 路径,目录,文件名,该方法可以将一个路径的中的所有子路径全部遍历一遍
for a,b,c in os.walk(path):
q=os.listdir(a)
for e in q:
#获取文件的创建时间
t1=time.localtime(os.path.getctime(a+"\\"+e))
#获取文件的修改时间
t2=time.localtime(os.path.getmtime(a+"\\"+e)) #因为os.path.getctime(路径+\\+文件名)得到的是时间戳,前面的time.localtime将时间戳转换为具体的年-月-日
#获取文件的大小,以字节为单位
s=os.path.getsize(a+"\\"+e)
#将所得数字添加到size1中
size1.append(s)
#将文件名和文件类型分开,例如:abc.txt,将会分割成["abc",".txt"]这样的列表
n=os.path.splitext(e)
#将所得类型添加到list1中
list1.append(n[1]) #提取t1中的具体数字,例如:t1=20190806则w1=[2019,08,06],则列表第一个元素为年份,即w1[0]=年
w1=list(t1)
#将年份按半年分隔开(老师个憨批,我本来是按年分的,检查的时候然后现场改代码,改为半年的),按年分可参照修改时间代码段,几乎相同。
if w1[0]==2018:
if w1[1]<=6:
num11+=1
else:
num22+=1
elif w1[0]==2019:
if w1[1]<=6:
num33+=1
else:
num44+=1
#修时间数据提取
w2=list(t2)
#将列表的第一个元素(年份)添加到list3中
list3.append(w2[0])
#每一文件的类型全部存在了list1列表中,对列表进行遍历,遍历的元素如果不在字典type1中,则向字典添加该元素{"类型":1},如果在字典中已经存在,则key值所对应的的键值+1
for i in list1:
if i not in type1:
type1[i]=1
else:
type1[i]+=1
'''
for i in list2:
if i not in ctime:
ctime[i]=1
else:
ctime[i]+=1
'''
for i in list3:
if i not in mtime:
mtime[i]=1
else:
mtime[i]+=1
for i in size1:
if i<1000:
num1+=1
elif i<10000:
num2+=1
elif i<100000:
num3+=1
else:
num4+=1
#对文件大小建图
list4=[num1,num2,num3,num4]
fig,ax=plt.subplots()
y=list4
x=['0~1000','1000~10000','1000~100000','others']
b=ax.bar(x,y)
plt.bar(range(len(x)),y,color='rbgb')
for a,b in zip(x,y):
ax.text(a,b+1,b,ha='center',va='bottom')
plt.title(u"文件大小",FontProperties=font)
plt.show()
#对文件创建时间建图
x=["2018.1~6","2018.7~12","2019.0~6","2019.7~12"]
y=[num11,num22,num33,num44]
fig,ax=plt.subplots()
b=ax.bar(x,y)
plt.title(u'创建时间',FontProperties=font)
for a, b in zip(x, y):
ax.text(a, b+1, b, ha='center', va='bottom')
plt.bar(x,y,color='rgb')
plt.show()
#对文件的修改时间建图
m_list1=[]
m_list2=[]
#将m_time字典中的键值作为X轴,values值做为Y轴
m_list1=mtime.keys()
m_list2=mtime.values()
x=m_list1
y=m_list2
#画图
fig,ax=plt.subplots()
#传X,Y
b=ax.bar(x,y)
#在图上添加该类的具体个数
for a, b in zip(x, y):
ax.text(a, b+1, b, ha='center', va='bottom')
#设置图的颜色
plt.bar(x,y,color='yrb')
#FontProperties=font,用来识别中文字体
plt.title(u'修改时间',FontProperties=font)
plt.show()
#对文件类型建图
t_list1=[]
t_list2=[]
t_list1=type1.keys()
t_list2=type1.values()
x=t_list1
y=t_list2
fig,ax=plt.subplots()
b=ax.bar(x,y)
for a, b in zip(x, y):
ax.text(a, b+1, b, ha='center', va='bottom')
plt.title(u'文件类型',FontProperties=font)
plt.bar(range(len(x)),y)
plt.show()
#作图唯一的遗憾,我做的是条形图,不是直方图,但问题不大,若做直方图将bar函数改为hist
#你哥哥我只能帮你到这了,碰见憨批老师让你现场改,你就自求多福吧