Python基础知识-Part4:循环、dict、set、不可变对象

本文深入解析Python中的循环结构,包括while和for循环的使用技巧,以及列表、元组、字典和集合等数据结构的特点与操作方法,帮助读者掌握Python编程核心。

循环

1、Python中的循环,有“while”循环和“for”循环两种。

2、“for”循环不同于C/C++/Java的“for”循环,Python的“for”循环需要列表(list)或者元组(tuple)做辅助之用,且循环条件判断是“是否到达列表或者元组的末尾,到达即退出”。

3、使用“for”循环时,如有二维列表二维元组,单重循环只对一维形态下的元素有效。此时请使用双重循环

4、使用“for”循环时,如需计数判断,类似C/C++/Java中的“for (int i = 0; i <= 100 ; i++)”时,需要通过“rang()”函数生成一个从0开始,参数减1为止的整数序列,可以直接使用,也可转换成列表或者元组。请记住,“rang(101)”是“0~100”,“i 小于等于100”,“i 小于101”。

5、“while”循环基本同C/C++/Java,判断条件可以为,可以为表达式

6、“break”和“continue”的用法基本同C/C++/Java。“break”跳出与其相离最近循环;“continue”是提前结束本轮循环,进入下一轮。

names = ["Seven", "Jack", "Ace", "Taro"]
for name in names:
    print(name)

print("\n")

classmates = ("A", "B", ("C", "D"))
for classmate in classmates:
    print(classmate)

print("\n")

for classmate in classmates:
    for classmate_in in classmate:
        print(classmate_in)

print("\n")

sum = 0
print("请计算1~100的和")
# for i in range(101):
# for i in list(range(101)):
for i in tuple(range(101)):
    sum += i
print("结果为:%d" % (sum))

print("\n")

sum = 0
n = 100
while n > 0:
    sum += n
    n -= 1

# while 1:
#     sum += n
#     n -= 1
#     if n == 0:
#         break

print("n从100到0,sum = %d" % (sum))

print("\n")

n = 0
n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

 

dict

1、“dict”,全称是“dictionary”,也就是字典。其他语言中也称作“map”。采用“键-值”(key-value)存放的方式。是“”的集合。只是存入“”的时候,会存入与“”对应的“”。

2、定义用大括号定义“{}”,“键-值”一一对应。使用时则用“[]”方括号,内部只能放“”。

3、添加新数据,可以直接“键-值”对应赋值放入。

4、修改某个“”对应的“”时,原来的“”将不做保存,直接覆盖。

5、通过“键”取“值”,如果“键”不存在,则会报Error。

6、通过“‘in your_dict_name”的方式,可以判断该“”是否存在,存在返回“True”,不存在返回“False”。

7、判断存在,还可以通过“your_dict_name.get(‘键’)”的方式,存在返回“值”,不存在默认返回“None”,也可以返回自定义值,即“your_dict_name.get(‘键’, “自定义值”)”。

8、删除一个“”,调用“pop()”的方法,“your_dict_name.pop(‘键’)”来删除“”,同时“”对应的“”也会同时删除。

9、相对“列表(list)”来说,“dict”的查找和插入速度快,同时不会随数据增多而变慢,但是占用内存大,内存浪费多。所以“dict”采用空间换时间。

10、“dict”的“”不可变,可以是固定的整数、字符串,但是不可以为“列表”。

dict_name_score = {'Seven': 95, 'Jack': 90, 'Ace': 80}
print("dict_name_score: %s" % (dict_name_score))
print("dict_name_score['Seven']:%d" % (dict_name_score['Seven']))
# Error,[]内只能是键值,key
# print("dict_name_score[1]:%d" % (dict_name_score[1]))

print("\n")

dict_name_score['Taro'] = 75
print("dict_name_score['Taro'] = 75")
print("dict_name_score['Taro']:%d" % (dict_name_score['Taro']))

print("\n")

dict_name_score['Ace'] = 85
print("dict_name_score['Ace'] = 85")
print("dict_name_score['Ace']:%d" % (dict_name_score['Ace']))

print("\n")

if 'Leo' in dict_name_score:
    print("dict_name_score['Leo']:%d" % (dict_name_score['Leo']))
else:
    print("'Leo' in dict_name_score return is %s" % ('Leo' in dict_name_score))

print("\n")

if dict_name_score.get('Seven'):
    print("dict_name_score.get('Seven'): %d" % (dict_name_score['Seven']))
else:
    print("dict_name_score.get('Seven') is return %s" %
          (dict_name_score.get('Seven')))

print("\n")


if dict_name_score.get('Leo', -1) != -1:
    print("dict_name_score.get('Leo', -1): %d" % (dict_name_score['Leo']))
else:
    print("dict_name_score.get('Leo', -1) is return %d" %
          (dict_name_score.get('Leo', -1)))
    print("dict_name_score.get('Leo') is return %s" %
          (dict_name_score.get('Leo')))

print("\n")

dict_name_score.pop('Seven')
print("dict_name_score.pop('Seven')")
print("dict_name_score:%s" % (dict_name_score))

print("\n")

 

set

1、“set”和“dict”类似,均为“键”的集合。但是,“set”并不保存跟“键”相对应的“值”。

2、“set”中的“”不能单个取出使用。可以集体输出。

3、生成“set”时,需要一个“list”或者“tuple”做“”导入。但是,“list”本身不可以作为“”,“tuple”可以。

4、“set”内部的“”属于无序不重复序列,可以看成是数学上的“集合”。而且,这个“无序”完全就是看心情,很随性的“无序”。

5、“add()”和“remove()”分别可以添加和删除“set”中的“”。添加和删除成功均返回“None”,添加已存在和不存在都是“None”,但是,删除已存在是“None”,删除的“键”不存在则直接Error

6、“set”可以做“取交集”、“取并集”的操作,“交集”是“&”运算、“并集”是“|”运算。

7、同样的,“set”的“”不可以是“list”,其“”是导入“list”内部元素的,而非“list”。

set_name = set([1, 2, 3])
print("set_name:%s" % (set_name))

print("\n")

list_name = [2, 4, 3, 7, 8]
# print("list_name:%s" % (list_name))
set_name_list = set(list_name)
print("set_name_list:%s" % (set_name_list))

print("\n")

set_name_list_other = set([2, 4, 3, 7, 8])
print("set_name_list_other:%s" % (set_name_list_other))

print("\n")

list_name_unOrder = [3, 7, 7, 8, 5]
# print("list_name_unOrder:%s" % (list_name_unOrder))
set_name_unOrder = set(list_name_unOrder)
print("set_name_unOrder:%s" % (set_name_unOrder))

print("\n")

set_name_unOrder_other = set([3, 7, 7, 8, 5])
print("set_name_unOrder_other:%s" % (set_name_unOrder_other))

print("\n")

t1 = (1, 2)
t2 = (3, 2)
st1 = set(t1)
st2 = set(t2)
st = set([t1, t2, 3])
print("st1:%s" % (st1))
print("st2:%s" % (st2))
print("st:%s" % (st))

print("\n")

set_name.add(4)
set_name.remove(4)
print("set_name.add(4) is return %s" % (set_name.add(4)))
print("set_name.add(4) again is return %s" % (set_name.add(4)))
print("set_name:%s" % (set_name))

print("\n")

set_name.add(4)
print("set_name.add(4) again")
print("set_name:%s" % (set_name))

print("\n")

set_name.remove(4)
set_name.add(4)
print("set_name.remove(4) is return %s" % (set_name.remove(4)))
# print("set_name.remove(4) again is return %s" % (set_name.remove(4)))
print("set_name:%s" % (set_name))

print("\n")

s1 = set([1, 2, 3])
s2 = set([3, 4, 7, 8])
print("s1 & s2:%s" % (s1 & s2))
print("s1 | s2:%s" % (s1 | s2))

print("\n")

 

不可变对象

1、“list”有个排序操作“sort()”。因为“list”是可变对象,所以存在这个操作。

2、“变量指向对象”。只能改变指向,无法改变对象本身。

3、对字符串操作,只是在原来字符串的基础上,额外生成了新的字符串如下面代码所示。

a = [4, 2, 1, 5]
a.sort()
print("a:%s" % (a))

print("\n")

b = 'abc'
b.replace('a', 'A')
print("b.replace('a', 'A'):%s" % (b.replace('a', 'A')))
print("b:%s" % (b))

print("\n")

c = b.replace('a', 'A')
print("b:%s, c:%s" % (b, c))

 

C:\Users\admin\PyCharmMiscProject\.venv\Scripts\python.exe F:\excle_to_clm\rate_set\rate_sync.py 2025-10-25 17:15:31,088 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-25 17:15:31,089 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-25 17:15:31,089 [INFO] __main__.RateSetSynchronizer: 开始同步 RATE_SET 数据... 2025-10-25 17:15:31,133 [INFO] __main__.RateSetSynchronizer: 正在处理 C 文件: wlc_clm_data_6726b0.c 2025-10-25 17:15:31,133 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT4_rate_set.c 2025-10-25 17:15:31,133 [INFO] __main__.RateSetSynchronizer: 解析出 23 个已有枚举项 2025-10-25 17:15:31,135 [WARNING] __main__.RateSetSynchronizer: ⚠️ 未找到计数,跳过: 2G_20M_EXT4 2025-10-25 17:15:31,136 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11b] 条目不足: 需要 4, 实际 0 2025-10-25 17:15:31,137 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11g] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,137 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11n] 条目不足: 需要 72, 实际 68 2025-10-25 17:15:31,137 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11AC] 条目不足: 需要 32, 实际 28 2025-10-25 17:15:31,137 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11AX] 条目不足: 需要 96, 实际 92 2025-10-25 17:15:31,137 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT4_11BE] 条目不足: 需要 20, 实际 16 2025-10-25 17:15:31,137 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 6 个有效子集 2025-10-25 17:15:31,137 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 23 2025-10-25 17:15:31,137 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 222 个数据项,6 个索引,6 个枚举 2025-10-25 17:15:31,137 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,138 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_20M_EXT4_rate_set.c]: 未找到枚举定义: rate_set_2g_20m_ext4 2025-10-25 17:15:31,138 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT_rate_set.c 2025-10-25 17:15:31,138 [INFO] __main__.RateSetSynchronizer: 解析出 19 个已有枚举项 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11b] 条目不足: 需要 4, 实际 0 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11g] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11n] 条目不足: 需要 56, 实际 52 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11AC] 条目不足: 需要 24, 实际 20 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11AX] 条目不足: 需要 72, 实际 68 2025-10-25 17:15:31,139 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_EXT_11BE] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,139 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 6 个有效子集 2025-10-25 17:15:31,140 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 19 2025-10-25 17:15:31,140 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 170 个数据项,6 个索引,6 个枚举 2025-10-25 17:15:31,140 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,140 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_20M_EXT_rate_set.c]: 未找到枚举定义: rate_set_2g_20m_ext 2025-10-25 17:15:31,140 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_rate_set.c 2025-10-25 17:15:31,140 [INFO] __main__.RateSetSynchronizer: 解析出 32 个已有枚举项 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_20M_11b] 条目不足: 需要 4, 实际 0 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_20M_11g] 条目不足: 需要 8, 实际 4 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11b] 条目不足: 需要 4, 实际 0 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11g] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11n] 条目不足: 需要 48, 实际 44 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11AC] 条目不足: 需要 20, 实际 16 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11AX] 条目不足: 需要 60, 实际 56 2025-10-25 17:15:31,141 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_20M_11BE] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,141 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 8 个有效子集 2025-10-25 17:15:31,141 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 32 2025-10-25 17:15:31,141 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 152 个数据项,8 个索引,8 个枚举 2025-10-25 17:15:31,141 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,143 [INFO] __main__.RateSetSynchronizer: 成功构建新内容,总长度变化: 3905640 → 3909339 2025-10-25 17:15:31,144 [INFO] __main__.RateSetSynchronizer: ✅ 成功注入 8 条目到 rate_set_2g_20m 2025-10-25 17:15:31,144 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT4_rate_set.c 2025-10-25 17:15:31,144 [INFO] __main__.RateSetSynchronizer: 解析出 19 个已有枚举项 2025-10-25 17:15:31,145 [WARNING] __main__.RateSetSynchronizer: ⚠️ 未找到计数,跳过: 2G_40M_EXT4 2025-10-25 17:15:31,145 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT4_11g] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,145 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT4_11n] 条目不足: 需要 72, 实际 68 2025-10-25 17:15:31,145 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT4_11AC] 条目不足: 需要 32, 实际 28 2025-10-25 17:15:31,146 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT4_11AX] 条目不足: 需要 96, 实际 92 2025-10-25 17:15:31,146 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT4_11BE] 条目不足: 需要 20, 实际 16 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 5 个有效子集 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 19 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 221 个数据项,5 个索引,5 个枚举 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,146 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_EXT4_rate_set.c]: 未找到枚举定义: rate_set_2g_40m_ext4 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT_rate_set.c 2025-10-25 17:15:31,146 [INFO] __main__.RateSetSynchronizer: 解析出 15 个已有枚举项 2025-10-25 17:15:31,147 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT_11g] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,147 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT_11n] 条目不足: 需要 56, 实际 52 2025-10-25 17:15:31,147 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT_11AC] 条目不足: 需要 24, 实际 20 2025-10-25 17:15:31,147 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT_11AX] 条目不足: 需要 72, 实际 68 2025-10-25 17:15:31,147 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_EXT_11BE] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,147 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 5 个有效子集 2025-10-25 17:15:31,147 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 15 2025-10-25 17:15:31,147 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 169 个数据项,5 个索引,5 个枚举 2025-10-25 17:15:31,148 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,148 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_EXT_rate_set.c]: 未找到枚举定义: rate_set_2g_40m_ext 2025-10-25 17:15:31,148 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_rate_set.c 2025-10-25 17:15:31,148 [INFO] __main__.RateSetSynchronizer: 解析出 28 个已有枚举项 2025-10-25 17:15:31,149 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11g] 条目不足: 需要 24, 实际 20 2025-10-25 17:15:31,149 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11n] 条目不足: 需要 48, 实际 44 2025-10-25 17:15:31,149 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11_BE] 条目不足: 需要 16, 实际 12 2025-10-25 17:15:31,149 [INFO] __main__.RateSetSynchronizer: ✅ 共成功提取 3 个有效子集 2025-10-25 17:15:31,149 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 28 2025-10-25 17:15:31,149 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 79 个数据项,3 个索引,3 个枚举 2025-10-25 17:15:31,149 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:15:31,150 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_rate_set.c]: 未找到枚举定义: rate_set_2g_40m 2025-10-25 17:15:31,155 [INFO] __main__.RateSetSynchronizer: 原文件已备份为: wlc_clm_data_6726b0_20251025_171531.c.bak 2025-10-25 17:15:31,159 [INFO] __main__.RateSetSynchronizer: ✅ 成功写入更新后的文件: wlc_clm_data_6726b0.c ✅ 同步完成 同步完成! 进程已结束,退出代码为 0 你看看吧
10-26
E:\AI_System\web_ui>python server.py Traceback (most recent call last): File "E:\AI_System\web_ui\server.py", line 19, in <module> from core.config import CoreConfig as SystemConfig File "E:\AI_System\core\__init__.py", line 4, in <module> from .environment import EnvironmentInterface, DefaultEnvironment, EnvironmentManager ImportError: cannot import name 'EnvironmentInterface' from 'core.environment' (E:\AI_System\core\environment.py) E:\AI_System\web_ui>python server.py 2025-08-12 03:38:45,565 - CoreConfig - INFO - 📋 初始化配置管理器 | 环境前缀: AI_SYSTEM_ | 基础目录: E:\AI_System 2025-08-12 03:38:45,565 - CoreConfig - INFO - 🔍 加载环境变量... 2025-08-12 03:38:45,565 - CoreConfig - INFO - 📄 加载配置文件: E:\AI_System\config\system_config.json (类型: json) 2025-08-12 03:38:45,565 - CoreConfig - INFO - - 加载配置项: model = gpt-3.5-turbo 2025-08-12 03:38:45,565 - CoreConfig - INFO - - 加载配置项: api_key = y***e 2025-08-12 03:38:45,565 - CoreConfig - INFO - - 加载配置项: log_level = INFO 2025-08-12 03:38:45,566 - CoreConfig - INFO - - 加载配置项: database = {字典, 键数: 3} 2025-08-12 03:38:45,566 - CoreConfig - INFO - - 加载配置项: services = {字典, 键数: 2} 2025-08-12 03:38:45,566 - CoreConfig - INFO - ✅ 配置加载完成 | 条目数: 11 2025-08-12 03:38:45,566 - CoreConfig - INFO - 🔄 配置变更检测: 新增 5 项, 删除 0 项, 修改 0 项 2025-08-12 03:38:45,566 - CoreConfig - INFO - ➕ 新增配置: model, api_key, log_level, database, services 2025-08-12 03:38:45,566 - CoreConfig - INFO - 📁 创建目录: E:\AI_System\cache 2025-08-12 03:38:45,568 - CoreConfig - INFO - 📋 初始化配置管理器 | 环境前缀: AI_SYSTEM_ | 基础目录: E:\AI_System 2025-08-12 03:38:45,568 - CoreConfig - INFO - 🔍 加载环境变量... 2025-08-12 03:38:45,568 - CoreConfig - INFO - 📄 加载配置文件: E:\AI_System\config\system_config.json (类型: json) 2025-08-12 03:38:45,568 - CoreConfig - INFO - - 加载配置项: model = gpt-3.5-turbo 2025-08-12 03:38:45,568 - CoreConfig - INFO - - 加载配置项: api_key = y***e 2025-08-12 03:38:45,568 - CoreConfig - INFO - - 加载配置项: log_level = INFO 2025-08-12 03:38:45,568 - CoreConfig - INFO - - 加载配置项: database = {字典, 键数: 3} 2025-08-12 03:38:45,569 - CoreConfig - INFO - - 加载配置项: services = {字典, 键数: 2} 2025-08-12 03:38:45,569 - CoreConfig - INFO - ✅ 配置加载完成 | 条目数: 14 2025-08-12 03:38:45,569 - CoreConfig - INFO - 🔄 配置变更检测: 新增 5 项, 删除 0 项, 修改 0 项 2025-08-12 03:38:45,569 - CoreConfig - INFO - ➕ 新增配置: model, api_key, log_level, database, services 2025-08-12 03:38:45,569 - CoreInit - INFO - Core module initialization started 2025-08-12 03:38:45,569 - EnvironmentManager - INFO - 环境管理器初始化完成 (基础目录: E:\AI_System\data\environment) 2025-08-12 03:38:45,569 - CoreInit - INFO - Environment manager created: DefaultEnvironment 2025-08-12 03:38:45,570 - CoreInit - INFO - Core module initialized successfully 2025-08-12 03:38:45,570 - CoreConfig - INFO - 📋 初始化配置管理器 | 环境前缀: APP_ | 基础目录: E:\AI_System 2025-08-12 03:38:45,570 - CoreConfig - INFO - 🔍 加载环境变量... 2025-08-12 03:38:45,570 - CoreConfig - INFO - ✅ 配置加载完成 | 条目数: 6 Traceback (most recent call last): File "E:\AI_System\web_ui\server.py", line 64, in <module> logger = setup_logger() File "E:\AI_System\web_ui\server.py", line 29, in setup_logger logger.setLevel(logging.DEBUG if system_config.DEBUG else logging.INFO) AttributeError: 'CoreConfig' object has no attribute 'DEBUG' E:\AI_System\web_ui>
08-13
很好,现在C:\Users\admin\PyCharmMiscProject\.venv\Scripts\python.exe F:\excle_to_clm\rate_set\rate_sync.py 2025-10-25 17:06:40,572 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-25 17:06:40,573 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-25 17:06:40,573 [INFO] __main__.RateSetSynchronizer: 开始同步 RATE_SET 数据... 2025-10-25 17:06:40,610 [INFO] __main__.RateSetSynchronizer: 正在处理 C 文件: wlc_clm_data_6726b0.c 2025-10-25 17:06:40,611 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT4_rate_set.c 2025-10-25 17:06:40,611 [INFO] __main__.RateSetSynchronizer: 解析出 23 个已有枚举项 2025-10-25 17:06:40,614 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 6 个 rate set 定义块 2025-10-25 17:06:40,614 [INFO] __main__.RateSetSynchronizer: 共成功提取 6 个有效子集 2025-10-25 17:06:40,616 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 23 2025-10-25 17:06:40,616 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 246 个数据项,6 个索引,6 个枚举 2025-10-25 17:06:40,616 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,616 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_20M_EXT4_rate_set.c]: 未找到枚举定义: rate_set_2g_20m_ext4 2025-10-25 17:06:40,616 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT_rate_set.c 2025-10-25 17:06:40,616 [INFO] __main__.RateSetSynchronizer: 解析出 19 个已有枚举项 2025-10-25 17:06:40,618 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 6 个 rate set 定义块 2025-10-25 17:06:40,618 [INFO] __main__.RateSetSynchronizer: 共成功提取 6 个有效子集 2025-10-25 17:06:40,618 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 19 2025-10-25 17:06:40,618 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 194 个数据项,6 个索引,6 个枚举 2025-10-25 17:06:40,618 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,619 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_20M_EXT_rate_set.c]: 未找到枚举定义: rate_set_2g_20m_ext 2025-10-25 17:06:40,619 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_rate_set.c 2025-10-25 17:06:40,619 [INFO] __main__.RateSetSynchronizer: 解析出 32 个已有枚举项 2025-10-25 17:06:40,620 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 8 个 rate set 定义块 2025-10-25 17:06:40,620 [INFO] __main__.RateSetSynchronizer: 共成功提取 8 个有效子集 2025-10-25 17:06:40,620 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 32 2025-10-25 17:06:40,620 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 184 个数据项,8 个索引,8 个枚举 2025-10-25 17:06:40,620 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,622 [INFO] __main__.RateSetSynchronizer: 成功构建新内容,总长度变化: 3905640 → 3910047 2025-10-25 17:06:40,622 [INFO] __main__.RateSetSynchronizer: ✅ 成功注入 8 条目到 rate_set_2g_20m 2025-10-25 17:06:40,623 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT4_rate_set.c 2025-10-25 17:06:40,623 [INFO] __main__.RateSetSynchronizer: 解析出 19 个已有枚举项 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 5 个 rate set 定义块 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 共成功提取 5 个有效子集 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 19 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 241 个数据项,5 个索引,5 个枚举 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,625 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_EXT4_rate_set.c]: 未找到枚举定义: rate_set_2g_40m_ext4 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT_rate_set.c 2025-10-25 17:06:40,625 [INFO] __main__.RateSetSynchronizer: 解析出 15 个已有枚举项 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 5 个 rate set 定义块 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: 共成功提取 5 个有效子集 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 15 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 189 个数据项,5 个索引,5 个枚举 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,627 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_EXT_rate_set.c]: 未找到枚举定义: rate_set_2g_40m_ext 2025-10-25 17:06:40,627 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_rate_set.c 2025-10-25 17:06:40,628 [INFO] __main__.RateSetSynchronizer: 解析出 28 个已有枚举项 2025-10-25 17:06:40,629 [INFO] __main__.RateSetSynchronizer: 从文件中初步匹配到 3 个 rate set 定义块 2025-10-25 17:06:40,629 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集 2025-10-25 17:06:40,629 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 28 2025-10-25 17:06:40,629 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 91 个数据项,3 个索引,3 个枚举 2025-10-25 17:06:40,629 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-25 17:06:40,629 [WARNING] __main__.RateSetSynchronizer: ❌ 处理文件失败 [2G_40M_rate_set.c]: 未找到枚举定义: rate_set_2g_40m 2025-10-25 17:06:40,635 [INFO] __main__.RateSetSynchronizer: 原文件已备份为: wlc_clm_data_6726b0_20251025_170640.c.bak 2025-10-25 17:06:40,639 [INFO] __main__.RateSetSynchronizer: ✅ 成功写入更新后的文件: wlc_clm_data_6726b0.c ✅ 同步完成 同步完成! 进程已结束,退出代码为 0 def extract_sub_rate_sets(self, content: str) -> List[Dict[str, Any]]: """ 提取 /*NAME*/ N, WL_RATE_xxx... 子集,支持多行、空格、换行等常见格式 """ sub_sets = [] # 移除所有 ); 结尾符号(不影响结构) cleaned_content = re.sub(r'[);]', '', content) # === 第一阶段:用非贪婪方式找出所有 /*...*/ N, ... 块 === # 匹配:/*NAME*/ 任意空白 数字 , 任意内容(直到下一个 /* 或结尾) block_pattern = r'/\*\s*([A-Z0-9_]+)\s*\*/\s*(\d+)\s*,?[\s\n]*((?:(?!\s*/\*\s*[A-Z0-9_]+\s*\*/).)*)' matches = re.findall(block_pattern, cleaned_content, re.DOTALL | re.IGNORECASE) self.logger.info(f"从文件中初步匹配到 {len(matches)} 个 rate set 定义块") for name, count_str, body in matches: try: count = int(count_str) except ValueError: self.logger.warning(f"计数无效,跳过: {name} = '{count_str}'") continue # 从 body 中提取所有 WL_RATE_XXX rate_items = re.findall(r'WL_RATE_[A-Za-z0-9_]+', body) if len(rate_items) < count: self.logger.warning(f"[{name}] 条目不足: 需要 {count}, 实际 {len(rate_items)} → 截断处理") rate_items = rate_items[:count] else: rate_items = rate_items[:count] self.logger.debug(f" 提取成功: {name} (count={count}) → {len(rate_items)} 项") sub_sets.append({ "name": name.strip(), "count": count, "rates": rate_items }) self.logger.info(f"共成功提取 {len(sub_sets)} 个有效子集") return sub_sets当我更改函数内容为def extract_sub_rate_sets(self, content: str) -> List[Dict[str, Any]]: """ 提取完整的 rate set 定义块,包括: - 注释 /*NAME*/ - 计数 N, - 所有 WL_RATE_XXX 行(含缩进、换行、对齐) """ sub_sets = [] # 匹配从 /*NAME*/ 开始,到下一个 /* 或结尾为止的所有内容 block_pattern = r'/\*\s*([A-Z0-9_]+)\s*\*/.*?(\d+)\s*,([\s\S]*?)(?=/\*\s*[A-Z0-9_]+\s*\*/|$)' matches = re.finditer(block_pattern, content, re.IGNORECASE | re.MULTILINE) for match in matches: name = match.group(1).strip() count_str = match.group(2) body_lines = match.group(3) try: count = int(count_str) except ValueError: self.logger.warning(f"计数无效,跳过: {name} = '{count_str}'") continue # 提取所有 WL_RATE 宏(用于后续校验) rate_items = re.findall(r'WL_RATE_[A-Za-z0-9_]+', body_lines, re.IGNORECASE) if len(rate_items) < count: self.logger.warning(f"[{name}] 条目不足: 需要 {count}, 实际 {len(rate_items)} → 截断处理") rate_items = rate_items[:count] else: rate_items = rate_items[:count] # 保留原始块(含换行、缩进、逗号),仅去除前后空白 raw_block = f"/*{name}*/ {count},\n{body_lines.strip()}" sub_sets.append({ "name": name, "count": count, "rates": rate_items, "raw_block": raw_block, # ← 新增:完整原始格式 "raw_body_lines": body_lines.strip().splitlines() # ← 分行保存便于控制 }) self.logger.info(f"共成功提取 {len(sub_sets)} 个有效子集(保留原始格式)") return sub_sets 之后处理子文件: 2G_40M_rate_set.c 2025-10-25 17:09:27,436 [INFO] __main__.RateSetSynchronizer: 解析出 28 个已有枚举项 2025-10-25 17:09:27,437 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11g] 条目不足: 需要 24, 实际 0 → 截断处理 2025-10-25 17:09:27,437 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11n] 条目不足: 需要 48, 实际 0 → 截断处理 2025-10-25 17:09:27,437 [WARNING] __main__.RateSetSynchronizer: [RATE_SET_2G_HT_40M_11_BE] 条目不足: 需要 16, 实际 0 → 截断处理 2025-10-25 17:09:27,437 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集(保留原始格式) 2025-10-25 17:09:27,437 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 28 2025-10-25 17:09:27,444 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 3 个数据项,3 个索引,3 个枚举 2025-10-25 17:09:27,444 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作...这里就不能识别出宏了
最新发布
10-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值