鱼C论坛

 找回密码
 立即注册
查看: 1521|回复: 8

[已解决]写一个计算Python代码行数的代码

[复制链接]
发表于 2017-11-22 19:18:48 | 显示全部楼层 |阅读模式

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

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

x
在学习带你学C带你飞,第一堂课上有个计算C语言代码行数的代码,我觉得根据这个可以改编成一个计算Python语言代码行数的py文件,代码如下
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <dirent.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <sys/stat.h>

  7. #define MAX 256

  8. long total;

  9. int countLines(const char *filename);
  10. int isCode(const char *filename);
  11. void findAllDirs(const char *path);

  12. int countLines(const char *filename)
  13. {
  14.      FILE *fp;
  15.      int count=0;
  16.      int temp;

  17.      if ((fp=fopen(filename,"r"))==NULL)
  18.      {
  19.            fprintf(stderr,"Can not open the file:%s\n",filename);
  20.            return 0;
  21.      }

  22.      while((temp=fgetc(fp))!=EOF)
  23.      {
  24.           if(temp=='\n')
  25.           {
  26.              count++;
  27.           }
  28.      }

  29.      fclose(fp);

  30.      return count;
  31. }

  32. int isCode(const char *filename)
  33. {
  34.      int length;

  35.      length=strlen(filename);

  36.      if(!strcmp(filename+(length-2),".c"))
  37.      {
  38.          return 1;
  39.      }
  40.      else
  41.      {
  42.          return 0;
  43.      }
  44. }

  45. void findAllDirs(const char *path)
  46. {
  47.      DIR *dp;
  48.      struct dirent *entry;
  49.      struct stat statbuf;

  50.      if ((dp=opendir(path))==NULL)
  51.      {
  52.           fprintf(stderr,"The path %s is wrong!\n",path);
  53.           return;
  54.      }

  55.      chdir(path);
  56.      while((entry=readdir(dp))!=NULL)
  57.      {
  58.            lstat(entry->d_name,&statbuf);

  59.            if (!strcmp(".",entry->d_name)||!strcmp("..",entry->d_name))
  60.                 continue;

  61.            if (S_ISDIR(statbuf.st_mode))
  62.            {
  63.                 findAllDirs(entry->d_name);
  64.            }
  65.            else
  66.            {
  67.                 if(isCode(entry->d_name))
  68.                 {
  69.                      total+=countLines(entry->d_name);
  70.                 }
  71.            }
  72.      }

  73.      chdir("..");
  74.      closedir(dp);
  75. }

  76. int main()
  77. {
  78.      char path[MAX]=".";

  79.      printf("计算中...\n");

  80.      findAllDirs(path);

  81.      printf("目前你总共写了%ld行代码!\n\n",total);

  82.      return 0;
  83. }
复制代码


只是我才疏学浅,没有办法写出来。。。甚至这个C语言代码也没看懂。仅仅把“.c”那里改成了“.py”,可是发现没任何用处。
所以求助大神。
最佳答案
2017-11-22 20:12:49
课后作业35讲最后一道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-22 19:31:04 | 显示全部楼层
顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 19:33:55 | 显示全部楼层
语法不同改后缀没用吧。。。虽然我也没看懂这个程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 19:38:13 | 显示全部楼层
你去看一下Python课后题,里面有。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-22 19:46:16 | 显示全部楼层
新手·ing 发表于 2017-11-22 19:38
你去看一下Python课后题,里面有。

那一节的?我现在看到20节的课后题,没发现有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 20:12:49 | 显示全部楼层    本楼为最佳答案   
课后作业35讲最后一道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 20:28:12 From FishC Mobile | 显示全部楼层
用python实现简单的多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-22 20:42:48 | 显示全部楼层
阿撩 发表于 2017-11-22 20:12
课后作业35讲最后一道题

能将那个图形用户界面的改成非图形用户界面的吗?有点头大,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 20:52:11 | 显示全部楼层
如默 发表于 2017-11-22 20:42
能将那个图形用户界面的改成非图形用户界面的吗?有点头大,谢谢!
  1. #------统计当前代码量总和------#

  2. import os
  3. def file_count(ext):  #计算文件个数
  4.     try:
  5.         files_count[ext] += 1
  6.     except KeyError:
  7.         files_count[ext] = 1
  8.     return files_count
  9. def calc_line(each_file): #计算文件行数
  10.     lines = 0
  11.     f = open(each_file)
  12.     try:
  13.         for each_line in f:   
  14.             lines += 1
  15.     except UnicodeDecodeError:
  16.         pass
  17.     f.close()
  18.     return lines
  19. def search_file(dir_path):
  20.     os.chdir(dir_path)
  21.     all_files = os.listdir(os.curdir)
  22.     for each_file in all_files:
  23.         if os.path.isfile(each_file):
  24.             ext = os.path.splitext(each_file)[1]
  25.             if ext in file_type:
  26.               
  27.                 lines = calc_line(each_file)
  28.                 file_count(ext)
  29.                 try:
  30.                     line_count[ext] += lines
  31.                 except KeyError:
  32.                     line_count[ext] = lines
  33.                
  34.            
  35.         else:
  36.             search_file(each_file)
  37.             os.chdir(os.pardir)



  38. dir_path = 'C:\\Users\\asus\\Desktop\\python练习'  #根据你自己的文件夹设定目录
  39. file_type  = ['.py', '.c', '.cpp']
  40. print(dir_path)
  41. files_count = {}
  42. line_count = {}
  43. search_file(dir_path)
  44. sum_line = 0
  45. text = []
  46. for each in line_count.keys():
  47.     sum_line = sum_line + line_count[each]
  48.     text_content = '【%s】源文件%d个,源代码%d行'%(each, files_count[each], line_count[each])
  49.     text.append(text_content)
  50. print('您目前共积累编写了%d行代码,完成进度:%.2f%%\n离10万行代码还差%d行,请继续努力'%(sum_line, sum_line/1000, 100000-sum_line))




复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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