如何编写符合指定规则的自定义词表生成Python脚本?
完善后的自定义词表生成脚本
以下是完全符合你规则要求的Python脚本,同时修正了原代码的核心逻辑问题:
import random from itertools import permutations, product # 规则配置 REQUIRED_KEYWORDS = ['NOSAM', 'ESYC', 'UMG'] ALLOWED_NUM_SEGMENTS = ['20', '21', '22', '23', '24'] MIN_LENGTH = 8 MAX_LENGTH = 15 OUTPUT_FILE = 'wordlist.txt' def random_case(word): """将字符串每个字符随机转换为大写/小写""" return ''.join(random.choice([c.upper(), c.lower()]) for c in word) def generate_valid_entries(): valid_entries = set() # 用集合自动去重 # 生成三个关键词的随机大小写变体 keyword_variants = [random_case(kw) for kw in REQUIRED_KEYWORDS] # 遍历关键词的所有排列顺序 for keyword_order in permutations(keyword_variants): keywords_total_len = sum(len(kw) for kw in keyword_order) available_len = MAX_LENGTH - keywords_total_len if available_len < 0: continue # 关键词总长度已超出上限,跳过 # 数字段可插入的位置:前、三个关键词之间、后,共4个位置 insert_positions = 4 max_num_segments = available_len // 2 # 每个数字段占2字符 # 遍历所有可能的数字段数量 for num_segments_count in range(0, max_num_segments + 1): # 分配数字段到4个位置(允许位置分配0个) for segment_distribution in product(range(num_segments_count + 1), repeat=insert_positions): if sum(segment_distribution) != num_segments_count: continue total_len = keywords_total_len + 2 * num_segments_count if not (MIN_LENGTH <= total_len <= MAX_LENGTH): continue # 构建完整条目 parts = [] # 前置数字段 parts.append(''.join(random.choice(ALLOWED_NUM_SEGMENTS) for _ in range(segment_distribution[0]))) # 关键词+中间数字段 for i in range(3): parts.append(keyword_order[i]) parts.append(''.join(random.choice(ALLOWED_NUM_SEGMENTS) for _ in range(segment_distribution[i+1]))) valid_entries.add(''.join(parts)) return valid_entries if __name__ == '__main__': entries = generate_valid_entries() with open(OUTPUT_FILE, 'w') as f: for entry in entries: f.write(entry + '\n') print(f"已生成{len(entries)}个符合规则的词表条目,保存至{OUTPUT_FILE}")
关键修正与说明
- 关键词完整性保证:通过排列组合确保每个条目必含三个完整关键词的大小写变体,解决原代码拆分字符的问题。
- 合法数字段处理:仅使用
20/21/22/23/24作为整体数字单元,支持在关键词前后/中间插入任意数量的合法数字段。 - 严格长度控制:计算关键词总长度后,动态限制数字段的总长度,确保最终条目长度在8-15字符范围内。
- 随机大小写实现:针对每个关键词的单个字符独立随机大小写,满足规则要求的灵活格式。
- 去重机制:使用集合存储生成结果,自动避免重复条目。
内容的提问来源于stack exchange,提问作者SH_FD
相关产品推荐
相关产品推荐

