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

批量记录格式化需求:连续数值合并及行长度限制

嘿,针对你这个十万+条记录的格式化需求,我整理了一套完整的实现方案,结合你给出的四条规则,咱们一步步来搞定:

批量处理十万+记录列表的格式化方案

核心规则拆解

先把需求拆解清楚,确保每个细节都覆盖到位:

  • 规则1:连续数值合并为「起始-结束」形式,非连续数值用逗号分隔(比如1,2,3,5会被处理成1-3,5)
  • 规则2:每行开头固定添加「11111」
  • 规则3:每行内容长度最大为80字符
  • 规则4:数值内容严格位于第21至80列,且每行末尾必须以逗号结尾

实现思路与Python代码示例

因为要处理十万+条记录,得保证效率和内存友好,用Python来实现是个靠谱的选择,下面是完整的逻辑代码:

第一步:合并连续数值

先写一个高效的连续数值合并函数,遍历一次列表就能完成,时间复杂度O(n),完全适配大数据量:

def merge_continuous_numbers(num_list):
    if not num_list:
        return []
    merged = []
    start = end = num_list[0]
    for num in num_list[1:]:
        if num == end + 1:
            end = num
        else:
            merged.append(f"{start}-{end}" if start != end else f"{start}")
            start = end = num
    # 处理最后一组未添加的序列
    merged.append(f"{start}-{end}" if start != end else f"{start}")
    return merged

第二步:生成符合格式要求的行

接下来处理行的格式:开头加「11111」后补空格到第20列,再填充数值内容,严格控制每行长度不超过80,且数值部分末尾加逗号:

def format_records(num_list):
    merged_items = merge_continuous_numbers(num_list)
    result_lines = []
    # 前缀:「11111」+15个空格,刚好占满前20列
    prefix = "11111" + " " * 15
    current_line_content = []
    
    for item in merged_items:
        # 模拟添加当前item后的数值内容长度(含末尾逗号)
        temp_content = ",".join(current_line_content + [item]) + ","
        # 数值部分最大允许60字符(80-20=60,对应第21到80列)
        if len(temp_content) <= 60:
            current_line_content.append(item)
        else:
            # 生成当前行并加入结果
            full_line = prefix + ",".join(current_line_content) + ","
            result_lines.append(full_line)
            current_line_content = [item]
    # 处理最后一行剩余的内容
    if current_line_content:
        full_line = prefix + ",".join(current_line_content) + ","
        result_lines.append(full_line)
    return result_lines

测试示例

假设输入数据是:[1,2,3,5,6,8,10,11,12,13]
调用函数测试:

input_nums = [1,2,3,5,6,8,10,11,12,13]
output_lines = format_records(input_nums)
for line in output_lines:
    print(line)

期望输出(前20列是「11111」加空格,数值从第21列开始):

11111               1-3,5-6,8,10-13,

如果合并后的数值内容过长,会自动拆分多行,比如合并内容是1-100,102-200,202-300,302-400,402-500,会拆成两行:

11111               1-100,102-200,202-300,302-400,
11111               402-500,

注意事项

  1. 如果输入的数值是字符串类型,记得先转换成整数再处理连续合并,避免出现"10"和"11"被误判为非连续的情况
  2. 处理十万+条记录时,建议分批读取输入数据(比如从文件按行读取),避免一次性加载所有数据占用过多内存
  3. 可以用len(line)验证每行长度,确保严格不超过80字符,数值部分完全落在第21-80列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:10