逻辑错误
此代码无法统计文件中代码量,不知何处出现问题,还请大佬赐教{:5_111:}import easygui as e
import os
def sum_lines(file):
lines = 0
with open(file) as f:
try:
for e in f:
lines += 1
except UnicodeDecodeError:
pass
return lines
def seach_file(file_name):
count=b=c=a=0
file = os.walk(file_name)
for each in file:
for i in each:
file_new = os.path.join(each,i)
num = sum_lines(file_new)
if os.path.splitext(i) == '.c':
count += 1
b += num
if os.path.splitext(i) == '.py':
c += 1
a += num
total = b + a
msg = '【.c】源文件%d个,源代码%d行\n【.py】源文件%d个,源代码%d行'%(count,b,c,a)
title = '您目前共累计编写%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力!'%(total,total/100000,100000-total)
e.msgbox(msg,title)
e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
path = e.diropenbox("请选择您的代码库")
seach_file(path)
本帖最后由 isdkz 于 2022-2-18 13:20 编辑
>>> help('os.path.splitext')
Help on function splitext in os.path:
os.path.splitext = splitext(p)
Split the extension from a pathname.
Extension is everything from the last dot to the end, ignoring
leading dots.Returns "(root, ext)"; ext may be empty.
>>>
要善用 help() 函数,还有学习英语很重要
从上面可以看到 Returns "(root, ext)",splitext返回的是一个元组,元组的第二个元素才是扩展名,
所以改成下面这样:
import easygui as e
import os
def sum_lines(file):
lines = 0
with open(file) as f:
try:
for e in f:
lines += 1
except UnicodeDecodeError:
pass
return lines
def seach_file(file_name):
count=b=c=a=0
file = os.walk(file_name)
for each in file:
for i in each:
file_new = os.path.join(each,i)
num = sum_lines(file_new)
if os.path.splitext(i) == '.c': # 因为splittext返回的是一个元组,所以加上
count += 1
b += num
if os.path.splitext(i) == '.py': # 加上
c += 1
a += num
total = b + a
msg = '【.c】源文件%d个,源代码%d行\n【.py】源文件%d个,源代码%d行'%(count,b,c,a)
title = '您目前共累计编写%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力!'%(total,total/100000,100000-total)
e.msgbox(msg,title)
e.msgbox("请打开您存放所有代码的文件夹……","统计代码量")
path = e.diropenbox("请选择您的代码库")
seach_file(path)
isdkz 发表于 2022-2-18 13:19
要善用 help() 函数,还有学习英语很重要
从上面可以看到 Returns "(root, ext)",splitext返回的是 ...
所得寺内、
淦泻 不弃_ 发表于 2022-2-18 13:26
所得寺内、
淦泻
还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂 isdkz 发表于 2022-2-18 13:06
要善用 help() 函数,还有学习英语很重要
从上面可以看到 Returns "(root, ext)",splitext返回的是 ...
还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂 本帖最后由 isdkz 于 2022-2-18 14:17 编辑
不弃_ 发表于 2022-2-18 14:07
还有一个问题:完成进度:%.2f%%,这个格式化字符串有点宽不懂
f 代表浮点型,也就是小数,.2 是小数点后保留两位小数,
两个%是取消%的特殊效果,类似转义的功能,%% 也就是直接显示 %,
关于python格式化字符串的方式,你可以看看这一篇文章:
https://mp.weixin.qq.com/s/mpjDJ50T5ZjskKIIZO6_vQ
页:
[1]