鱼C论坛

 找回密码
 立即注册
查看: 2519|回复: 2

大家看看这个程序哪里出现了错误啊

[复制链接]
发表于 2019-9-10 22:16:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一个统计代码行数的程序,不过出现了未发现文件的问题,希望大家能够帮忙解答一下
  1. import easygui as g
  2. import os

  3. def search_file(file_path, count = 0):
  4.     list_1 = os.listdir(file_path)
  5.     dict_1 = dict()
  6.     for each_path in list_1:
  7.         if os.path.isdir(each_path):
  8.             search_file(each_path)
  9.             os.chdir(os.pardir)
  10.         else :
  11.             ext = os.path.splitext(each_path)[1]
  12.             list_2 = ['.py', '.c', '.cpp', '.pas', '.asm']
  13.             if ext in list_2:
  14.                 line_count(each_path, count)
  15.                 dict_1.setdefault(ext, 0)
  16.                 dict_1[ext] += 1

  17. def line_count(each_path, count):
  18.     each_file = os.getcwd() + os.sep +each_path
  19.     with open(each_file) as f:
  20.         for each_line in f:
  21.             count += 1
  22.         return count

  23. file_path = g.diropenbox()
  24. search_file(file_path)
  25. msg = '您目前共累计编写了%d行代码,完成进度:%.2d\n离1万行还差%d行,请继续努力!' % (count, count / 10000, 10000 - count)
  26. keys = list(dict_1.keys())
  27. keys.sort()
  28. text = ''
  29. for each in keys:
  30.     text += '【%s】源文件,共%个文件\n'
  31. g.textbox(msg, '统计结果', text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-9-11 00:07:09 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-11 00:08 编辑

       你使用了相对路径,所以,在 search_file() 函数入口,需要 os . chdir() 到目标目录,而在函数出口,则必须通过 os . chdir() 恢复原始路径,你的代码缺少了函数入口的 os . chdir(),除此以外,你的代码还有相当多的问题,我已经一一加以改正,并把相对路径改成了绝对路径,不再使用  os . chdir() 函数改变当前目录。
  1. import easygui as g
  2. import os

  3. def search_file(file_path):
  4.     count = 0   
  5.     for each_path in os . listdir(file_path):
  6.         path = os . path . join(file_path , each_path)
  7.         if os . path . isdir(path):
  8.             count += search_file(path)
  9.         elif os . path . isfile(path):
  10.             ext = os . path . splitext(each_path)[1]
  11.             if ext in ['.py', '.c', '.cpp', '.pas', '.asm']:
  12.                 count += line_count(path)
  13.                 dict_1 . setdefault(ext , 0)
  14.                 dict_1[ext] += 1
  15.     return count

  16. def line_count(each_path):
  17.     count = 0
  18.     with open(each_path) as f:
  19.         for each_line in f:
  20.             count += 1
  21.     return count

  22. dict_1 = dict()
  23. file_path = g.diropenbox()
  24. count = search_file(file_path)
  25. if count > 10000:
  26.     msg = '您目前共累计编写了 %d 行代码,按 10000 行的目标衡量,您已经超额完成了 %.2f%%\n,超出了 %d 行,您辛苦了!' % (count , count / 100 , count - 10000)
  27. else:
  28.     msg = '您目前共累计编写了 %d 行代码,按 10000 行的目标衡量,完成进度:%.2f%%\n,离 10000 行还差 %d 行,请继续努力!' % (count , count / 100 , 10000 - count)
  29. keys = list(dict_1 . keys())
  30. keys . sort()
  31. text = ''
  32. for each in keys:
  33.     text += '【%s】源文件,共 %d 个文件\n' % (each , dict_1[each])
  34. g.textbox(msg , '统计结果' , text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-9-11 12:28:21 | 显示全部楼层
jackz007 发表于 2019-9-11 00:07
你使用了相对路径,所以,在 search_file() 函数入口,需要 os . chdir() 到目标目录,而在函数出口 ...

好的,谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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