You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 03:24:03