写在前面的话
写了一上午,一不小心关闭了页面,所有都没了。。。。。 胡乱重写了一部分,还是让我静一静。。痛哭、、、、引以为戒啊
1、实现登记用户信息界面,其中带星号的为必填项不能为空或者不能为空格
import easygui as g
msg = '【*真实姓名】为必填项。\n【*手机号码】为必填项。\n【*E-mail】为必填项。'
title = '账号中心'
fieldNames = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
fieldValues = g.multenterbox(msg , title , fieldNames)
for i in range(len(fieldNames)):
if '*' in fieldNames[i]: #判断为空的似乎有问题
if fieldValues == []:
g.msgbox('带*号的为必填项,请重新填写')
break
import easygui as g
msg = '【*真实姓名】为必填项。\n【*手机号码】为必填项。\n【*E-mail】为必填项。'
title = '账号中心'
fieldNames = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
fieldValues = []
fieldValues = g.multenterbox(msg , title , fieldNames) #如果没有输入就会进入循环
while 1:
if fieldValues == None:
break
errmsg = ''
for i in range(len(fielddNames)):
option = fieldNames[i].strip() #strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
if fieldValues[i].strip() == '' and option[0] == '*': #带星号的输入为空
errmsg += ('【%s】为必填项。\n\n' % fieldNames[i])
if errmsg == '':
break
fieldValues = g.multenterbox(errmsg,title,fieldNames,fieldValues) #循环后进行保存,并提示某项必填
print('用户资料如下%s ' % str(fieldValues))
运行:
>>>用户资料如下['effreg', 'crgth', 'vSVS', 'cA', 'cas', 'vFDSG']
2、递归搜索文件夹
import os
allfile = []
def get_all_file(path):
allfilelist = os.listdir(path)
for file in allfilelist:
filepath = os.path.join(path, file)
# 判断是否是文件夹
if os.path.isdir(filepath):
get_all_file(filepath)
# 是文件就将路径添加到列表
allfile.append(filepath)
return allfile
path = 'E:/Git仓库'
allfiles = get_all_file(path)
for item in allfiles:
print(item)
3、提供文件夹浏览框,让用户选择文本文档,打开并显示文本
import easygui as g
import os
filePath=g.fileopenbox('.txt')
#此处根据实际情况,进行字符编码设计
with open(filePath) as f:
title=os.path.basename(filePath)
msg='文件%s的内容如下:'%title
txt=f.read()
g.textbox(title,msg,txt)
4、在3的基础上,当用户点击“OK”按钮的时候,比较当前文件是否被修改过,如果修改过,则提示“覆盖保存”、“放弃保存”或“另存为”并实现其功能
import easygui as g
import os
file_path = g.fileopenbox(default="e:/pathonaaa/a/")
with open(file_path) as old_file:
title = os.path.basename(file_path)
msg="文件【%s】的内容如下:" % title
text = old_file.read()
text_after = g.textbox(msg,title,text) #注意textbox()打开后会自动在文末加上‘\n’,要去掉
if text != text_after[:-1]:
choice = g.buttonbox("检测到文件内容发生改变,请选择以下操作:","警告",("覆盖保存","放弃保存","另存为"))
if choice == "覆盖保存":
with open(file_path,"w") as old_file:
#以新写入的方式打开当前的文件#
old_file.write(text_after)
#覆盖写入#
if choice == "放弃保存":
pass
if choice == "另存为":
another_path = g.filesavebox(default=".txt")
#先确定了新文件的路径#
if os.path.splitext(another_path)[1] !=".txt":
#如果新的文件没有保存成txt文件的话#
another_path +=".txt"
#那就在屁股上加上.txt#
with open(another_path,"w") as new_file:
new_file.write(text_after)
5、统计代码量,显示离10W行代码还有多远,递归搜索各个文件夹,显示各个类型的源文件和源代码数量,显示总行数与百分比
import os
import easygui as g
#查找文件
def find_file(file_path,target):
os.chdir(file_path)
all_files=os.listdir(os.curdir)
for each in all_files:
#print(each)
fext=os.path.splitext(each)[1]
if fext in target:
lines=calc_code(each) #统计行数
#print("文件%s的代码行数是%d"%(each,lines))
#统计文件数
try:
file_list[fext]+=1
except KeyError:
file_list[fext]=1
#统计源代码行数
try:
source_list[fext] += lines
#print(source_list[fext])
except KeyError:
source_list[fext] = lines
#print(source_list[fext])
if os.path.isdir(each):
find_file(each,target) # 递归调用
os.chdir(os.pardir) #返回上层目录
#统计行数
def calc_code(file_name):
lines=0
with open(file_name,encoding='gb18030',errors='ignore') as f:
print("正在分析文件%s..."%file_name)
try:
for eachline in f:
lines += 1
except UnicodeDecodeError:
pass
print("文件%s分析完毕,包含代码行%d." %(file_name,lines))
return lines
#显示结果
def show_result(start_dir):
lines=0
total=0
text=''
for i in source_list:
lines=source_list[i]
total+=lines
text+='%s源文件%d个,源代码%d行\n'%(i,file_list[i],lines )
title='统计结果'
msg='目前代码行数:%d\n完成进度:%.2f%%\n距离十万行代码还差%d行'%(total,total/1000,100000-total)
g.msgbox(msg,title,text)
target=['.py','.java','.c','.cc','.cpp'] #定义需要查找的源文件类型
file_list={}
source_list={}
g.msgbox('请打开您的文件夹','统计代码量')
path=g.diropenbox('请选择您的代码库:')
find_file(path,target)
show_result(path)