|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import easygui as g
- import os
- def countPyLines(path):
-
- for i in path:
- for each in i[2]:
- file_ext = os.path.splitext(each)
- if file_ext[1] in ['.py','.c','.cpp','.pas','.asm']:
- ext = file_ext[1]
- file_path = i[0] + os.sep + each #获得所有指定后缀文件路径
- file_dict[ext] += 1
- f = open(file_path,'rb')
- for eachline in f:
- codeline_dict[ext] += 1
- f.close()
-
- detail = ''
- lines = 0
- for keys in file_dict.keys():
- detail += '【%s】文件共%s个,共%s行\n'%(keys, file_dict[keys], codeline_dict[keys])
- lines += codeline_dict[keys]
- message = '您目前共累积编写了%s行代码,完成进度:%.2f%% \n离10万行代码还差%s行,请继续努力'% (lines, lines/1000, 100000-lines)
- g.textbox(message,'统计结果',detail)
- file_dict = {'.py':0,'.c':0,'.cpp':0,'.pas':0,'.asm':0} # 初始化字典 =存放指定代码文件名和文件个数
- codeline_dict = {'.py':0,'.c':0,'.cpp':0,'.pas':0,'.asm':0} # 初始化字典 =存放指定代码文件名和代码行数
- file = g.diropenbox()
- path = os.walk(file)
- countPyLines(path)
复制代码
------遍历选定文件夹下指定后缀名文件统计行数的习题。
问题就是使用open()打开py文件时碰到UnicodeDecodeError-,这种情况pass掉的话发现忽略掉了好多py的文件未统计
网上搜索使用'rb'二进制读取之后没有出现异常
但是如果读取内容要处理什么的就比较麻烦。- -为什么出现这种异常
求助求助。。
本帖最后由 ba21 于 2017-8-11 18:03 编辑
https://pypi.python.org/pypi/chardet
import chardet
#以rb读取文件返回文件的编码(用到了chardet类)
#获取文件编码
with open(file_name, 'rb') as f:
raw = f.read()
result = chardet.detect(raw)
encoding = result['encoding']
#用获取到的编码打开文件
lines = 0
with open(file_name,encoding=encoding) as f:
print('正在分析文件:%s ...' % file_name)
try:
for each_line in f:
lines += 1
except Exception as reason:
print(str(reason)) # 读取出错显示错误信息......
print('%s -> %s' % (file_name,lines))
return lines
|
|