整理的部分文件操作如下:
os.chdir(路径)#改变当前工作目录到指定的路径
os.listdir(os.curdir) :#返回指定的文件夹包含的文件或文件夹的名字的列表
os.curdir 返回当前目录 (’.’)
os.path.splitext(each_file)[1]#分割路径,返回路径名和文件扩展名的元组
os.path.isdir(path)返回path规范化的绝对路径。
另外附上使用到的easygui操作:
path = easygui.diropenbox(msg=None, title=None)
ccbox(msg=‘Shall I continue?’, title=’ ‘)
multenterbox(msg=‘Fill in values for the fields.’, title=’ ‘)
fileopenbox(msg=None, title=None)
textbox(msg=’’, title=’ ‘, text=’’, codebox=False, callback=None, run=True)
实现代码:
import easygui as g
import os
import time
start_time=[2018,9,1]
p=(0,31,28,31,30,31,30,31,31,30,31,30,31)
r=(0,31,29,31,30,31,30,31,31,30,31,30,31)
def tongji(i):#统计行数
s=0
try:
with open(i) as f:
print("正在统计文件:%s..."%i)
for r in f:
s+=1
except:
pass
return s;
def search(path):#深度搜索
try:
os.chdir(path)#定位到指定路径
except:
return
mulu=os.listdir(os.curdir)#返回文件或文件夹的名字的列表
for i in mulu:
houzhui=os.path.splitext(i)[1]#提取后缀
if houzhui in file_houzhui:
r=tongji(i)#统计行数
global sum_r
sum_r+=r
try:
file_num[houzhui]+=1
except:
file_num[houzhui]=1
try:
file_r[houzhui]+=r
except:
file_r[houzhui]=r
if os.path.isdir(i):
search(i)
os.chdir(os.pardir) #返回上一层目录
file_houzhui=[".c",".cpp",".py",".cc",".java",".pas",".asm"]
file_r={}
file_num={}
sum_r=0
msg="请选择你存放代码的文件夹"
path=g.diropenbox(msg,"选择文件夹")
search(path)
text=""
day=0
time=int(time.strftime('%Y%m%d',time.localtime(time.time())))
time=[time//10000,time//100%100,time%100]
ch="今天是"+str(time[0])+"年"+str(time[1])+"月"+str(time[2])+"日"
while not(start_time[0]==time[0] and start_time[1]==time[1] and start_time[2]==time[2]):
start_time[2]+=1
day+=1
if start_time[0]%4==0 and start_time[0]%100!=0 or start_time[0]%400==0:
if start_time[1]>12:
start_time[1]=1
start_time[0]+=1
if start_time[2]>r[start_time[1]]:
start_time[1]+=1
start_time[2]=1
else:
if start_time[1]>12:
start_time[1]=1
start_time[0]+=1
if start_time[2]>p[start_time[1]]:
start_time[1]+=1
start_time[2]=1
for i in file_r:
text+="【%s】源文件%d个,源代码%d行\n"%(i,file_num[i],file_r[i])
msg=ch+"开学已经%d天,已经累计完成%d行代码,平均每天%d行"%(day,sum_r,sum_r/day)
g.textbox(msg,"统计结果",text)