统计C语言代码行数的pyton代码

首先是白嫖以下大神的代码:统计python代码行数小工具_linecount工具-CSDN博客

然后,让ChatGPT帮我改为如下的完整代码:

import os

from tkinter import Tk, Label, Button, filedialog

def open_file(file_path, encoding):

    try:

        file = open(file_path, 'r', encoding=encoding)

        return file

    except UnicodeDecodeError:

        return None

def count_lines_in_file(file_path, encodings=('gb2312', 'gbk', 'utf-8')):

    count = 0

    file = None

    for encoding in encodings:

        file = open_file(file_path, encoding)

        if file:

            break

    if not file:

        raise Exception(f'Error reading file: {file_path}')

    with file:

        for line in file:

            line = line.strip()  # 剔除行首行尾的空白字符

            if line and not line.isspace() and not line.startswith('//'):

                # 如果不是空行、制表符行或注释行,则计数器加1

                count += 1

   

    return count

def count_lines_in_directory(directory):

    total_count = 0

    for dirpath, dirnames, filenames in os.walk(directory):

        for filename in filenames:

            if filename.endswith('.c'):

                # 仅处理C源代码文件

                file_path = os.path.join(dirpath, filename)

                try:

                    count = count_lines_in_file(file_path)

                    print(f'{file_path}: {count}')

                    total_count += count

                except Exception as e:

                    print(str(e))

    return total_count


 

windows = Tk()

windows.title("统计代码行数小工具")  #设置标题

windows.geometry("550x250")

def clicked():  #定义Button的事件处理函数

    directory = filedialog.askdirectory()

    L1.configure(text="C代码文件总行数:%s 行\""

                      %(count_lines_in_directory(directory)))

   

button = Button(windows,text="选择文件夹并提交",command=clicked)  #定义“提交”按钮,并指定Button的事件处理函数

button.pack()

L1 = Label(windows,text = "",bg='white',width=200,height=10)    #创建一个标签,用于展示统计的代码行信息

L1.pack()

windows.mainloop()

特点:支持三种编码格式,你可以继续加其它编码。简单直接 :)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总(二更) DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用户的历史行为以及用户的一些个人信息,对系统中的候选物品进行筛选,挑…

备考2024年上海高考数学:历年选择题真题练一练(2014~2023)

今天距离2024年高考还有三个多月的时间,今天我们来看一下2014~2023年的上海高考数学的选择题,从过去十年的真题中随机抽取5道题,并且提供解析。 后附六分成长独家制作的在线练习集,科学、高效地反复刷这些真题,吃透真题…

Dockerfile执行的时候没有执行CMD

参考:https://blog.csdn.net/Zx13170918986/article/details/130831052 在dockerfile中编写CMD后,发现如果执行docker run -itd这样的指令,是没法启动CMD脚本的,例如以下的dockerfile FROM node:16 WORKDIR /home/ COPY start_…

Sora爆火,数字人IP如何借助AIGC视频生成软件制作短视频营销?

ChatGPT、Sora等大模型的出现,创新了短视频内容创作生产方式。但目前Sora模型无法准确模拟复杂场景的物理特性,并且可能无法理解因果关系导致视频失真。 广州虚拟动力基于用户使用需求,推出了AIGC数字人视频生成平台,企业、品牌可…

c++基础学习第三天(指针,结构体)

c基础学习第三天(指针,结构体) 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修…

Android MediaCodec 简明教程(五):使用 MediaCodec 编码 ByteBuffer 数据,并保存为 MP4 文件

系列文章目录 Android MediaCodec 简明教程(一):使用 MediaCodecList 查询 Codec 信息,并创建 MediaCodec 编解码器Android MediaCodec 简明教程(二):使用 MediaCodecInfo.CodecCapabilities 查…

php:实现字符串补零str_pad()

说明 str_pad($input_string, $total_length, $pad_string, $pad_type); $input_string 是要填充的原始字符串。$total_length 是填充后的字符串总长度,包括原始字符串的长度。$pad_string 是用于填充的字符,通常是零。$pad_type 是填充的位置&#xff0…

欲哭无泪,2024年软考有变!中高项只考1次了

今天可能最重磅的消息是:2024年软考工作安排及有关事项的通知文件在疯传,这份文件中提到了: 软考高级方面: 信息系统项目管理师从2次改为了1年只考1次,放在了上半年考。 系统规划与管理师依然保持1次,但是…

每日一练:LeeCode-707. 设计链表 【链表+虚拟头结点+设计】

每日一练:LeeCode-707. 设计链表 【链表虚拟头结点设计】 思路设置虚拟头节点 本文是力扣 每日一练:LeeCode-707. 设计链表 【链表虚拟头结点设计】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode-70…

0101二阶与三阶行列式-行列式-线性代数

一 引例 求解二元一次方程组 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1\\ a_{21}x_1a_{22}x_2b_2\\ \end{cases} {a11​x1​a12​x2​b1​a21​x1​a22​x2​b2​​ 解: 1 a 21 − 2 a 11 ⇒ x 2 a 11 b 2 − a…

Python函数的闭包

嵌套函数 在一个函数内部定义的函数称为嵌套函数 闭包的形成 内层函数对外层函数非全局变量的引用就会形成闭包 闭包作用 保证数据安全 例子 li [] def average(value):li.append(value)return sum(li)/len(li) 如上面代码li[]这个列表人人都能修改,这样就…

自然语言处理实战项目26-NLP模型训练中前置应用之分词方法的应用

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目26-NLP模型训练中前置应用之分词方法的应用。本文详细介绍了自然语言处理(NLP)模型训练中前置应用之分词方法的应用。文章首先简要概述了NLP的概念和分词在其中的重要性。随后,文章详细介绍了四种主要的分词方法…

MQL5学习之简单移动平均线MA的编写

昨天还是有点高估自己了,MACD相对较难一点,改学MA的编写,首先明确MA的计算,假如有4个值,p[1,2, 3, 4], period3, 则v[0]p[0], v[1]p[1],v[2](p[0]p[1]p[2])/32, v[3](v[2]*3p[3]-p…

浏览器展示Blob/File文件

1. 浏览器展示Blob/File文件 I.Blob格式转Base64格式 当我们接收到后端传输过来的文件时,很多时候我们需要将传过来的文件转为Base64格式。如后端传来验证码图片时等 下面将提供函数: // Blob转Base64 export const blobToBase64 (blob: Blob) >ne…

ChatGPT论文指南|ChatGPT如何助力论文中的数据分析!【建议收藏】

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 公众号原文▼▼▼▼: ChatGPT论文指南|ChatGPT如何助力论文中的数据分析!【建议收藏】 小编在之前的论文写作流程中,介绍了大量论文文字工作&#xff…

Effective objective-c-- 内存管理

Effective objective-c-- 内存管理 前言理解引用计数引用计数工作原理属性存取方法中的内存管理自动释放池保留环要点 以ARC简化引用计数使用ARC时必须遵循的方法和命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理方法要点 在dealloc方法中只释放引用并解除监听要点…

Mybatis-Plus 5分钟快速上手,10分钟熟练使用

小伙伴们好,欢迎关注,一起学习,无限进步 以下为学习 mybatis-plus 过程中的笔记 mybatis-plus 官网地址:https://mp.baomidou.com/ 文章目录 特性快速开始mybatis-plus 配置插入测试及雪花算法主键生成策略查询更新删除查询指定字…

Text2SQL 和 智能问答 的提示词写法

Text2SQL 生成 Query SQL System Message You are a {dialect} expert. Given an input question, creat a syntactically correct {dialect} query to run. Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} r…

Linux 创建.NET 服务

文章目录 创建服务启用服务启动 & 重启服务查看服务状态问题排查 创建服务 将服务文件上传到 /home/mes/api-mes-dev, 其他服务修改对应的目录在 /usr/lib/systemd/system/ 创建 mesapi-dev.service, 其他服务修改对应文件名 [Unit] Descriptionmesapi-dev service[Servi…

探索Linux世界:初次接触和基本指令(文件操作)

文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…