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

本文介绍了一个用于统计Python代码行数的小工具,包括编码检测、多行注释处理和TkinterGUI设计。作者展示了如何使用`linecount`函数统计指定目录及其子目录中的C和H文件行数,并提供了错误处理和编码转换功能。
摘要由CSDN通过智能技术生成

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

然后,让ChatGPT帮我改为如下的完整代码(第三次修正:))

import os

from tkinter import Tk, Label, Button, filedialog

import sys

import codecs

import chardet

import shutil

from datetime import datetime

def open_file(file_path,forced_encoding):

    try:

        # 检测文件编码

        with open(file_path, 'rb') as f:

            contents = f.read()

            result = chardet.detect(contents)

            encoding = result['encoding']

            if forced_encoding != '':

                encoding = forced_encoding

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

            return file

    except Exception as e:

        print(f"处理文件 {file_path} 时出现错误:{e}")

        return None

def count_lines_in_file(file_path,forced_encoding):

    count = 0

    in_multi_line_comment = False

    file = open_file(file_path,forced_encoding)

    if not file:

        raise Exception(f'出现错误Error reading file: {file_path}')

    with file:

        for line in file:

            clean_line = line.strip()

            if in_multi_line_comment:

                if "*/" in clean_line:

                    in_multi_line_comment = False

                continue

            elif not clean_line or clean_line.startswith('//'):

                continue

            elif clean_line.startswith('/*'):

                in_multi_line_comment = True

                continue

            count += 1

    return count

def count_lines_in_directory(directory):

    total_count = 0

    now = datetime.now()

    #current_dir = os.getcwd()  # 获取当前工作目录

    #target_dir = os.path.join(current_dir, '{}'.format(now.strftime("%Y-%m-%d_%H-%M-%S")))  # 在当前路径下创建 temp 目录

    target_dir = 'D:/Temp/{}'.format(now.strftime("%Y-%m-%d_%H-%M-%S"))

    # 创建 temp 目录

    os.makedirs(target_dir, exist_ok=True)

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

        for filename in filenames:

            if filename.endswith('.c') or filename.endswith('.h'):

                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(f'aaaaaaaaaaaaaaaaaaa{file_path}:{str(e)}')

                    # 复制文件到 temp 目录

                    file_name = os.path.basename(file_path)

                    target_file_path = os.path.join(target_dir, file_name)

                    shutil.copy(file_path, target_file_path)

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

        for filename in filenames:

            if filename.endswith('.c') or filename.endswith('.h'):

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

                try:

                    # 将文件转换为 UTF-8 编码

                    with open(file_path, 'rb') as file:

                        content = file.read()  # 读取二进制文件内容

                    try:

                        content_decoded = content.decode('utf-8')  # 尝试使用UTF-8解码

                    except UnicodeDecodeError:

                        content_decoded = content.decode('latin-1')  # 如果解码出错,尝试使用latin-1解码

                    with open(file_path, 'w', encoding='utf-8') as file:

                        file.write(content_decoded)  # 将解码后的内容写入文件

                except Exception as e:

                    print(f'bbbbbbbbbbbbbbbbbbb{file_path}:{str(e)}')                                

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

        for filename in filenames:

            if filename.endswith('.c') or filename.endswith('.h'):

                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(f'ccccccccccccccccccccc{file_path}:{str(e)}')                      

    return total_count

# Windows APP design

windows = Tk()

windows.title("Code Line Counting Tool")

windows.geometry("450x450")

def clicked():

    directory = filedialog.askdirectory()

    L2.configure(text="directory: %s"

                      %directory)

    L1.configure(text="The total number of code lines in files %s lines"

                      %(count_lines_in_directory(directory)))

# UI layout    

button = Button(windows,text="Select folder and submit",command=clicked)

button.pack()

L2 = Label(windows,text = "",bg='white',width=200,height=10)

L2.pack()

L1 = Label(windows,text = "",bg='white',width=200,height=10)

L1.pack()

windows.mainloop()

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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抢购飞天茅台代码是指使用Python编写的程序代码,用于在茅台抢购活动中自动完成抢购操作。具体来说,Python是一种简单易学的编程语言,具备强大的数据处理和网络请求功能,非常适合用于编写抢购代码。 在编写抢购飞天茅台代码时,我们可以利用Python的网络请求库来模拟网页的请求和响应过程,实现模拟登录、选择商品、加入购物车和提交订单等操作。同时,我们可以利用Python的多线程或异步编程来提高抢购的效率。 首先,我们需要分析飞天茅台抢购的网页结构和接口,了解登录、加入购物车和提交订单等操作对应的URL地址和传入的参数。然后,我们可以使用Python的网络请求库发送POST或GET请求,模拟登录并获取相关的验证码和登录凭证。 接下来,我们可以使用Python的HTML解析库或正则表达式来解析获取到的网页内容,找到目标商品的相关信息,比如商品ID、库存等。根据抢购时间,我们可以设置一个定时器,让程序在规定时间内自动发起抢购请求。 一旦抢购到了目标商品,我们可以使用Python的模拟点击操作,自动将商品加入购物车,并在提交订单时填写好相关的收货信息。最后,我们可以使用Python发送支付请求,完成支付流程,从而成功抢购到飞天茅台。 需要注意的是,抢购飞天茅台属于市场行为,存在一定的风险。而且,几乎所有的抢购活动都会对抢购的频率和数量进行限制,所以编写抢购代码并不一定能够百分之百成功。因此,在参与抢购之前,我们需要了解相关的规则和限制,并根据实际情况来决定是否使用抢购代码。 ### 回答2: Python抢购飞天茅台代码是用Python语言编写的程序,用于在茅台发售抢购活动开始时,自动提交购买申请,以帮助用户提高购买成功率。 下面是一个简单的Python抢购飞天茅台的示例代码: ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Referer': 'https://www.maotai.com.cn/goods?code=10000056', 'Cookie': 'your_cookie_here' } def buy_maotai(): session = requests.Session() url = 'https://www.maotai.com.cn/buy' # 构造请求参数 data = { 'code': '10000056', # 飞天茅台的商品代码 'num': 1 # 购买数量 } response = session.post(url, headers=headers, data=data) # 判断购买是否成功 if response.status_code == 200 and '购买成功' in response.text: print('购买成功!') else: print('购买失败!') buy_maotai() ``` 注意,在使用这段代码之前,你需要获取到合法的Cookie值,并将其替换到代码中的`your_cookie_here`处。你可以通过登录茅台官网,在浏览器的开发者工具中查看请求头中的`Cookie`值来获取。 该代码使用了Python的requests库发送POST请求,模拟用户在官网提交购买申请的过程。在函数内部,我们创建了一个会话(session),并通过session发送POST请求,将商品代码和购买数量作为请求参数传递给官网服务器。 最后,我们通过判断服务器的响应状态码和返回的页面内容来确定购买是否成功,并在控制台输出对应的结果。 需要注意的是,这只是一个简单示例代码,实际环境中抢购过程可能更加复杂,需要根据具体的抢购规则和页面结构进行相应的修改。 ### 回答3: 飞天茅台是一种非常珍贵且热门的酒品,由于其供不应求的特点,很多人想要抢购它。而Python作为一种程序设计语言,也可以被用来编写抢购飞天茅台的代码。 要编写一个抢购飞天茅台的Python代码,首先需要了解抢购的具体规则。通常情况下,抢购是在特定的时间开始,而数量有限,因此需要快速响应并提交订单。代码可以通过以下几个步骤来实现: 1. 导入所需的库:在Python中,可以使用selenium库来模拟浏览器操作,以及使用requests库来发送HTTP请求。 2. 打开网页:使用selenium库打开飞天茅台的购买页面,并等待抢购开始。 3. 自动填写表单:通过查看购买页面的HTML结构,可以找到需要填写的表单字段,并使用selenium库自动填写这些字段,如姓名、联系方式、地址等。 4. 提交订单:一旦所有表单字段都被填写完毕,代码将使用selenium模拟点击提交按钮,将订单信息提交给服务器。 5. 检查结果:抢购结束后,需要检查订单是否成功提交。可以通过查看返回的页面内容或者查看订单状态来确认抢购结果。 需要注意的是,由于抢购过程需要与网站进行交互,代码的速度非常重要。可以使用多线程或者异步编程技术来提高抢购的效率。 然而,抢购飞天茅台是一项非常困难的任务,因为许多人都希望获得这种稀缺的酒品。网站往往采取了各种反抢购措施,如验证码、请求限制等,以增加难度。因此,编写一个可以保证100%成功抢购的代码是非常困难的。 最重要的是,当尝试抢购时,我们应该保持理性,合法合规地进行。抢购只是一种竞争手段,真正的收获应该是品尝到飞天茅台带来的美妙味道,而不仅仅是拥有它的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值