Python实现txt内URL分类排序输出:空分类不打印标题
脚本缺陷修复
原脚本实现了读取TXT内URL、按URL第4段路径分为engine、wormix_mm、wormix_ok三类分组输出的功能,但存在固定输出全部分类标题的问题——哪怕某分类下没有匹配的URL,也会打印空分类标题行,不符合实际使用预期。
原逻辑问题点
原代码固定遍历预设的3个分类,没有提前校验每个分类下是否存在有效匹配内容,直接执行标题写入操作,导致空分类也会被输出标题。
修复思路
- 遍历每个分类时,先提前筛选该分类下所有匹配的URL条目
- 筛选结果为空时直接跳过该分类,不执行标题和内容写入
- 保留原有的分类排序规则、分类间空行分隔的输出格式,避免改变原有正常场景的输出效果
修复后完整代码
def my_sort(conts): social_folders = {'engine': 1, 'wormix_mm': 2, 'wormix_ok': 3} line_fields = conts.strip().split("/") social = line_fields[3] return social_folders[social] category_titles = ('First', 'Second', 'Third') category_paths = ['engine', 'wormix_mm', 'wormix_ok'] with open('./testsort.txt') as testsortf, open('./test_out999.txt', "w") as test_out: contents = testsortf.readlines() # 处理最后一行无换行的格式问题,同时兼容空文件场景 if contents and not contents[-1].endswith('\n'): contents[-1] = f'{contents[-1]}\n' contents.sort(key=my_sort) # 标记首个输出分类,控制分类前的空行规则 has_output = False for k, target_fold in enumerate(category_paths): # 筛选当前分类下所有匹配的URL matched_urls = [line for line in contents if line.strip().split("/")[3] == target_fold] # 无匹配内容直接跳过 if not matched_urls: continue # 非首个输出的分类前增加空行分隔 if has_output: test_out.write('\n') # 写入分类标题 test_out.write(f'{category_titles[k]}:\n') # 写入分类下所有URL for url in matched_urls: test_out.write(f'{url}') has_output = True
修复后效果
- 仅含
engine类URL的输入:只输出First:标题及对应URL,不输出后续空分类的标题 - 仅含
engine、wormix_mm两类URL的输入:输出两个有效分类的内容,跳过空的Third分类 - 三类URL全量存在的输入:输出效果与原脚本完全一致,无格式差异
内容的提问来源于stack exchange,提问作者Kuroneko
相关产品推荐
相关产品推荐

