字典中的列表自增问题求教
import easygui as gimport os
totalcount = 0
codingdict = {}
def ChoiceCountType():
'''选择要统计哪些代码文件类型'''
global codingdict
choices = [".py", ".c", ".cpp", ".txt"]# 设置代码文件选项
usertype = g.multchoicebox(msg="请从下列列表中选择要统计的代码文件类型!", title="代码统计", choices=choices)
codingdict = dict.fromkeys(usertype, )# 给类型字典赋初值{类型,[个数,有效代码数]}
dirpath = g.diropenbox()
return dirpath
def ChoiceDir(dirpath):
global totalcount
for paths, dirs, files in os.walk(dirpath):
if len(files) > 0:# 如果有文件,就执行下一步的遍历文件列表
for file in files:
# if file[-3:]==".py":#如果是py文档,执行接下来的操作 这种方式是死写法,用倒着数判断文件类型
ext = os.path.splitext(file)# 这是活写法,切片出类型,然后判断出类型在不在编程类型文件里
if ext in codingdict.keys():# 如果切出来的类型在字典的KEY中
codingdict += 1# 字典里个数+1
filelinecount = 0 #原本是设置了一个变量统计每个文件的有效代码
with open(paths + "\\" + file, encoding="utf-8",
errors="ignore") as fp:# py文件是UTF-8,TXT是ANSI,单独设置会报错所以忽略报错
dateline = fp.readlines()
for line in dateline:
if line == "\n":
continue
elif line.startswith("#"):
continue
else:
filelinecount += 1#现在不应该做变量自增,应该是字典里的代码量自增
#codingdict.values()+=1 #?????这个咋不办事啊T,T
totalcount += 1
print(f"{file}有效代码数是{filelinecount}")
print(f"总代码量是{totalcount}")
openpath = ChoiceCountType()
ChoiceDir(openpath)
for each in codingdict.keys():
print(f"共有{each}文件{codingdict}个")
老哥们,俩问题求教:
1.为啥运行时会先输出一个?
2.我定义了一个类型统计字典{类型,[个数,有效代码数]},想在for file in files循环中,实现文件个数,有效代码量的自增,这个咋处理都处理不好,求老哥们支支招,写了5小时了{:10_266:} if ext in codingdict.keys():# 如果切出来的类型在字典的KEY中
这样写,文件数量统计好像也不对。。{:10_247:} 1.先输出一个是执行下面这行代码就会输出,这个模块我也不太清楚
usertype = g.multchoicebox(msg="请从下列列表中选择要统计的代码文件类型!", title="代码统计", choices=choices)
2.python3中dict.values()返回的不是数组类型,dict.keys()也不是,所以还是用这种codingdict+=1
dic = {'a':1, 'b':}
print(dic.values()) # dict_values(])
print(type(dic.values()))# <class 'dict_values'>
print(type(dic.keys())) # <class 'dict_keys'> proer 发表于 2020-7-26 19:54
1.先输出一个是执行下面这行代码就会输出,这个模块我也不太清楚
usertype = g.multchoicebox(msg= ...
with open()那里好像也有问题 应该是 +'\\'
自顶 import easygui as g
import os
codingdict = {}
typedict={}
linecountdict={}
def ChoiceCountType():
'''选择要统计哪些代码文件类型'''
global codingdict
global typedict
global linecountdict
choices = [".py", ".c", ".cpp", ".txt"]# 设置代码文件选项
usertype = g.multchoicebox(msg="请从下列列表中选择要统计的代码文件类型!", title="代码统计", choices=choices)
#codingdict = dict.fromkeys(usertype, )# 给类型字典赋初值{类型,[个数,有效代码数]}
typedict=dict.fromkeys(usertype,0)
linecountdict=dict.fromkeys(usertype,0)
dirpath = g.diropenbox()
return dirpath
def calc_code(file_name):
'''统计有效代码行的函数'''
codinglines = 0
with open(file_name, encoding="utf-8",errors="ignore") as fp:
print('正在分析文件:%s ...' % file_name)
dateline = fp.readlines()
for line in dateline:
if line == "\n":
continue
elif line.startswith("#"):
continue
else:
codinglines+=1
return codinglines
def ChoiceDir(dirpath):
'''用os.walk()遍历计算文件数量和有效代码数分别存进对应列表中'''
global typedict
global linecountdict
for paths, dirs, files in os.walk(dirpath):
if len(files) > 0:# 如果有文件,就执行下一步的遍历文件列表
for file in files:
ext = os.path.splitext(file)# 切片出类型,然后判断出类型在不在编程类型文件里
if ext in typedict.keys():# 如果切出来的类型在字典的KEY中
lines=calc_code(file) #调用函数算出现在循环到的这个文件有多少有效代码行数
typedict+=1 #基于这个key给typedict赋值,统计现在这个文件类型的文件数量
linecountdict+=1 #基于这个key给linecountdict赋值,统计现在这个类型的文件有多少有效行数
def ShowResult():
msg="你现在总共写了XXX代码"
text=""
title="统计结果"
lines=0
totallines=0
for i in linecountdict.keys():
print(f"{i}类型的文件共计有效代码量{linecountdict}行")
for each in typedict.keys():
print(f"有{each}类型的文件{typedict}个")
openpath = ChoiceCountType()
ChoiceDir(openpath)
ShowResult()
这回我参照小甲鱼课后作业,一个字典搞不定就用两个字典分别存,结果报的错让我更迷茫了。{:10_266:}
零基础从入门到放弃。。。。大佬们谁能帮忙瞅瞅哪出的问题。 import easygui as g
import os
codingdict = {}
typedict={}
linecountdict={}
def ChoiceCountType():
'''选择要统计哪些代码文件类型'''
global codingdict
global typedict
global linecountdict
choices = [".py", ".c", ".cpp", ".txt",".cs",".aspx"]# 设置代码文件选项
usertype = g.multchoicebox(msg="请从下列列表中选择要统计的代码文件类型!", title="代码统计", choices=choices)
#codingdict = dict.fromkeys(usertype, )# 给类型字典赋初值{类型,[个数,有效代码数]}
typedict=dict.fromkeys(usertype,0)
linecountdict=dict.fromkeys(usertype,0)
dirpath = g.diropenbox()
return dirpath
def calc_code(paths,file_name):
'''统计有效代码行的函数'''
codinglines = 0
with open(paths + "\\" + file_name,errors="ignore") as fp:
print('正在分析文件:%s ...' % file_name)
dateline = fp.readlines()
for line in dateline:
if line == "\n":
continue
elif line.startswith("#"):
continue
else:
codinglines+=1
return codinglines
def ChoiceDir(dirpath):
'''用os.walk()遍历计算文件数量和有效代码数分别存进对应列表中'''
global typedict
global linecountdict
for paths, dirs, files in os.walk(dirpath):
if len(files) > 0:# 如果有文件,就执行下一步的遍历文件列表
for file in files:
ext = os.path.splitext(file)# 切片出类型,然后判断出类型在不在编程类型文件里
if ext in typedict.keys():# 如果切出来的类型在字典的KEY中
lines=calc_code(paths,file) #调用函数算出现在循环到的这个文件有多少有效代码行数
typedict+=1 #基于这个key给typedict赋值,统计现在这个文件类型的文件数量
linecountdict+=lines #基于这个key给linecountdict赋值,统计现在这个类型的文件有多少有效行数
def ShowResult():
msg=""
text=""
title="统计结果"
totallines=0
for i in linecountdict.keys():
for each in typedict.keys():
if i==each:
text += (f"[{i}]类型的文件有{typedict}个,共计有效代码量{linecountdict}行\n")
totallines+=linecountdict
#print(totallines)
msg=f"您目前共累积编写了{totallines}行代码,完成进度:{float(totallines/10000)}%\n离 10 万行代码还差{10000-totallines}行,请继续努力!"
g.textbox(msg, title, text)
openpath = ChoiceCountType()
ChoiceDir(openpath)
ShowResult()
老哥们,用两个字典存可以实现了,我想请教下,用一个带列表的字典#codingdict = dict.fromkeys(usertype, )# 给类型字典赋初值{类型,[个数,有效代码数]}然后遍历file时让个数和有效代码数自增有办法实现吗? 在线求教
页:
[1]