鱼C论坛

 找回密码
 立即注册
查看: 4799|回复: 21

[已解决]关于代码行数统计的一个问题

[复制链接]
发表于 2018-12-27 09:44:54 | 显示全部楼层 |阅读模式
10鱼币
微信图片_20181227094236.png

  1. def calc_code(file_name):
  2.     lines = 0
  3.     with open(file_name) as f:
  4.         print('正在分析文件:%s ...' % file_name)
  5.         try:
  6.             for each_line in f:
  7.                 lines += 1
  8.         except UnicodeDecodeError:
  9.             pass # 不可避免会遇到格式不兼容的文件,这里忽略掉......
  10.     return lines
复制代码


这样统计的代码行数为什么比文件数还少?没有\n就不算一行吗?
最佳答案
2018-12-27 09:44:55
那是你文件编码的问题,可能不是utf-8
with open(filename,encoding='utf-8') as f:这么改试试,

最佳答案

查看完整内容

那是你文件编码的问题,可能不是utf-8 with open(filename,encoding='utf-8') as f:这么改试试,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 09:44:55 | 显示全部楼层    本楼为最佳答案   
那是你文件编码的问题,可能不是utf-8
with open(filename,encoding='utf-8') as f:这么改试试,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 09:46:59 | 显示全部楼层
行数和你的文件内部文本有关系,和文件数是个权值全系
没有可比关系
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 10:01:40 | 显示全部楼层
塔利班 发表于 2018-12-27 09:46
行数和你的文件内部文本有关系,和文件数是个权值全系
没有可比关系

可是我一个文件里面的代码也有几十行啊,为什么全部文件显示代码一共才23行?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 10:03:11 | 显示全部楼层
三只羊 发表于 2018-12-27 10:01
可是我一个文件里面的代码也有几十行啊,为什么全部文件显示代码一共才23行?

你把你的文件附件发出来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 10:05:37 | 显示全部楼层
塔利班 发表于 2018-12-27 10:03
你把你的文件附件发出来

微信图片_20181227100344.png

我都是.py的文件
类似于像这样的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 10:24:36 | 显示全部楼层
我运行我的没问题,你的idle可能中暑了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 10:47:21 | 显示全部楼层
塔利班 发表于 2018-12-27 10:24
我运行我的没问题,你的idle可能中暑了

大佬头像怎么又变龟仙人了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 10:49:33 | 显示全部楼层
塔利班 发表于 2018-12-27 10:24
我运行我的没问题,你的idle可能中暑了

不是啊,这个跟idle没关系吧?读取的时候不是一行一行读取的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 10:51:17 | 显示全部楼层
三只羊 发表于 2018-12-27 10:49
不是啊,这个跟idle没关系吧?读取的时候不是一行一行读取的吗?

是一行一行读,而且我运行没问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 10:53:11 | 显示全部楼层
塔利班 发表于 2018-12-27 10:51
是一行一行读,而且我运行没问题

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 10:54:04 | 显示全部楼层
塔利班 发表于 2018-12-27 10:51
是一行一行读,而且我运行没问题

我的idle运行也正常,用小甲鱼的代码读取的结果就是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 10:55:16 | 显示全部楼层
三只羊 发表于 2018-12-27 10:54
我的idle运行也正常,用小甲鱼的代码读取的结果就是这样

你发出来的不是小甲鱼的代码么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 11:05:00 | 显示全部楼层
塔利班 发表于 2018-12-27 10:55
你发出来的不是小甲鱼的代码么

对啊所以我很疑惑为什么会这样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 11:33:12 | 显示全部楼层
三只羊 发表于 2018-12-27 11:05
对啊所以我很疑惑为什么会这样

所以说你的ide允行不太顺利,你把单独运行这个文件的结果截图发出来?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 11:43:49 | 显示全部楼层
塔利班 发表于 2018-12-27 11:33
所以说你的ide允行不太顺利,你把单独运行这个文件的结果截图发出来?

这个文件运行没问题,功能都实现了。(第35讲课后题的倒数第二道题)
这个贴的问题是
第35讲课后题的最后一道题
小甲鱼的代码运行也是顺利的
只是结果让我觉得很疑惑,为什么34个文件,一共只有23行代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 11:46:26 | 显示全部楼层
三只羊 发表于 2018-12-27 11:43
这个文件运行没问题,功能都实现了。(第35讲课后题的倒数第二道题)
这个贴的问题是
第35讲课后题的最 ...

我都不知道你说的第几道题,你这个代码只能看出统计一个文件的,至于为什么少,那就是进了except,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 11:57:22 | 显示全部楼层
塔利班 发表于 2018-12-27 11:46
我都不知道你说的第几道题,你这个代码只能看出统计一个文件的,至于为什么少,那就是进了except,
  1. import easygui as g
  2. import os

  3. def show_result(start_dir):
  4.     lines = 0
  5.     total = 0
  6.     text = ""
  7.     for i in source_list:
  8.         lines = source_list[i]
  9.         total += lines
  10.         text += "【%s】源文件 %d 个,源代码 %d 行\n" % (i, file_list[i], lines)
  11.     title = '统计结果'
  12.     msg = '您目前共累积编写了 %d 行代码,完成进度:%.2f %%\n离 10 万行代码还差 %d 行,请继续努力!' % (total, total/1000, 100000-total)
  13.     g.textbox(msg, title, text)
  14.    
  15. def calc_code(file_name):
  16.     lines = 0
  17.     with open(file_name) as f:
  18.         print('正在分析文件:%s ...' % file_name)
  19.         try:
  20.             for each_line in f:
  21.                 lines += 1
  22.         except UnicodeDecodeError:
  23.             pass
  24.     return lines

  25. def search_file(start_dir) :
  26.     os.chdir(start_dir)
  27.     for each_file in os.listdir(os.curdir) :
  28.         ext = os.path.splitext(each_file)[1]
  29.         if ext in target :
  30.             lines = calc_code(each_file)
  31.             try:
  32.                 file_list[ext] += 1
  33.             except KeyError:
  34.                 file_list[ext] = 1
  35.             try:
  36.                 source_list[ext] += lines
  37.             except KeyError:
  38.                 source_list[ext] = lines

  39.         if os.path.isdir(each_file) :

  40.             search_file(each_file) # 递归调用

  41.             os.chdir(os.pardir) # 递归调用后切记返回上一层目录

  42.          

  43. target = ['.c', '.cpp', '.py', '.cc', '.java', '.pas', '.asm']
  44. file_list = {}
  45. source_list = {}

  46. g.msgbox("请打开您存放所有代码的文件夹......", "统计代码量")
  47. path = g.diropenbox("请选择您的代码库:")
  48. search_file(path)
  49. show_result(path)
复制代码


这是源码

你是说如果都是.py的文件,如果格式不兼容的话,就是进到except里了吧?
可是我查找的那个文件夹放的都是我的python作业,里面都是.py的文件,如果不兼容应该显示代码数量为0吧?
微信图片_20181227115556.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-27 12:39:50 | 显示全部楼层
我运行没问题,你在except里print(filename,eachline)看看哪些有坑,没统计进来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-27 14:35:50 | 显示全部楼层
塔利班 发表于 2018-12-27 12:39
我运行没问题,你在except里print(filename,eachline)看看哪些有坑,没统计进来

微信图片_20181227143322.png

按照你的提示,设置了print()
结果如上图。
那么问题又来了,为什么都是一样的文件格式,会出现不兼容的情况啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-24 03:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表