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

如何按特定条件补全文本文件中缺失的序列URL

补全同一基础路径下缺失的数字序列URL

需要处理包含多个URL的文本文件,对比相邻行的链接,补全同一基础路径下缺失的数字序列URL。例如:

输入相邻链接:

https://gp.to/ab/394/las69-02-09-2020/
https://gp.to/ab/394/las69-02-09-2020/4/

输出需补全中间序列:

https://gp.to/ab/394/las69-02-09-2020/
https://gp.to/ab/394/las69-02-09-2020/2/
https://gp.to/ab/394/las69-02-09-2020/3/
https://gp.to/ab/394/las69-02-09-2020/4/

完整输入示例

https://gp.to/ab/394/las69-02-09-2020/
https://gp.to/ab/394/las69-02-09-2020/4/
https://gp.to/ab/563/dimp-02-07-2023/
https://gp.to/ab/39443/omegs-02-07-2023/
https://gp.to/ab/39443/omegs-02-07-2023/3/
https://gp.to/ab/39443/lis-22-04-2018/
https://gp.to/ab/39443/lis-22-04-2018/2/
https://gp.to/ab/39443/madi-22-04-2018/
https://gp.to/ab/39443/madi-22-04-2018/5/

预期输出示例

https://gp.to/ab/394/las69-02-09-2020/
https://gp.to/ab/394/las69-02-09-2020/2/
https://gp.to/ab/394/las69-02-09-2020/3/
https://gp.to/ab/394/las69-02-09-2020/4/
https://gp.to/ab/563/dimp-02-07-2023/
https://gp.to/ab/39443/omegs-02-07-2023/
https://gp.to/ab/39443/omegs-02-07-2023/2/
https://gp.to/ab/39443/omegs-02-07-2023/3/
https://gp.to/ab/39443/lis-22-04-2018/
https://gp.to/ab/39443/lis-22-04-2018/2/
https://gp.to/ab/39443/madi-22-04-2018/
https://gp.to/ab/39443/madi-22-04-2018/2/
https://gp.to/ab/39443/madi-22-04-2018/3/
https://gp.to/ab/39443/madi-22-04-2018/4/
https://gp.to/ab/39443/madi-22-04-2018/5/

原代码存在的问题

  1. 未校验基础路径一致性:原代码没有判断相邻URL是否属于同一基础路径,若下一个URL是完全不同的路径,会错误尝试补全。
  2. 未处理基础路径(无数字)的情况:当当前URL是基础路径(无数字后缀),下一个URL是该路径下的数字子路径时,原代码无法识别并补全中间序列。
  3. URL生成逻辑有误:原代码使用current_url.rsplit('/', 1)[0]生成新URL,当当前URL是基础路径时,这种方式会导致路径错误。

修正后的代码

def parse_url(url):
    """解析URL,返回(基础路径, 数字),数字为None表示是基础路径"""
    parts = url.strip().split('/')
    # 过滤空字符串(URL结尾是/,split后最后一个元素为空)
    parts = [p for p in parts if p]
    # 从后往前查找数字部分
    for idx in range(len(parts)-1, -1, -1):
        if parts[idx].isdigit():
            # 提取数字的父路径作为基础路径
            base_path = '/'.join(parts[:idx]) + '/'
            return (base_path, int(parts[idx]))
    # 未找到数字,返回原URL作为基础路径
    return (url.strip(), None)

# 读取输入文件,过滤空行
with open('input.txt', 'r') as input_file:
    lines = [line.strip() for line in input_file if line.strip()]

output_lines = []

for i in range(len(lines)):
    current_url = lines[i]
    output_lines.append(current_url + '\n')  # 保留换行符,保证输出格式一致
    
    if i + 1 >= len(lines):
        continue
    
    next_url = lines[i+1]
    current_base, current_num = parse_url(current_url)
    next_base, next_num = parse_url(next_url)
    
    # 仅当基础路径相同时才执行补全逻辑
    if current_base != next_base:
        continue
    
    # 场景1:当前是基础路径,下一个是带数字的子路径
    if current_num is None and next_num is not None and next_num > 1:
        for num in range(2, next_num):
            new_url = f"{current_base}{num}/"
            output_lines.append(new_url + '\n')
    # 场景2:当前和下一个都是同基础路径下的数字子路径,且存在缺失序列
    elif current_num is not None and next_num is not None and next_num > current_num + 1:
        for num in range(current_num + 1, next_num):
            new_url = f"{current_base}{num}/"
            output_lines.append(new_url + '\n')

# 写入输出文件
with open('output.txt', 'w') as output_file:
    output_file.writelines(output_lines)

代码说明

  1. parse_url函数:负责解析每个URL,分离出基础路径和对应的数字(如果有)。例如:
    • 输入https://gp.to/ab/394/las69-02-09-2020/4/,返回("https://gp.to/ab/394/las69-02-09-2020/", 4)
    • 输入https://gp.to/ab/394/las69-02-09-2020/,返回("https://gp.to/ab/394/las69-02-09-2020/", None)
  2. 路径一致性校验:只有相邻URL的基础路径完全相同时,才会执行补全逻辑,避免跨路径错误补全。
  3. 两种补全场景处理:
    • 基础路径到带数字子路径:补全2到目标数字-1的序列
    • 同基础路径下的两个数字子路径:补全中间缺失的数字序列
  4. 换行符处理:确保输出的每一行都有正确的换行符,与输入格式保持一致。

内容的提问来源于stack exchange,提问作者nicholaspooran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:57