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

Python实现TXT文件中日期开头的关联多行按逗号拼接合并

TXT分组按行拼接实现方案

你的初始思路是可行的,通过双变量暂存当前组的日期和对应内容,逐行遍历按类型分支处理即可完成需求,具体实现逻辑和可运行代码如下。

核心处理逻辑

  • 初始化两个暂存变量:一个存当前记录的日期行,一个存当前记录下所有普通文本行的列表
  • 逐行读取源文件,首先过滤掉所有空行
  • 若当前行匹配日期格式:
    • 若暂存变量里已经存了上一条的日期,说明上一条记录的内容已经全部读取完成,将日期和攒好的文本用逗号拼接后写入目标文件
    • 清空暂存的内容列表,把当前行作为新记录的日期存入暂存变量
  • 若当前行是普通文本行,直接追加到当前记录的内容列表中
  • 所有行遍历完成后,额外把最后一组暂存的记录写入目标文件(最后一条记录后面没有新的日期行触发写入,不加这步会丢失最后一条数据)

可直接运行的Python代码

import re

# 适配输入的 年-月-日 时:分:秒 日期格式
date_match_rule = re.compile(r'^\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}')

# 替换为你自己的文件路径
input_file = "input.txt"
output_file = "output.txt"

current_date = None
current_text_list = []

with open(input_file, 'r', encoding='utf-8') as fin, open(output_file, 'w', encoding='utf-8') as fout:
    for line in fin:
        # 去掉行尾的换行符,保留内容内部的空格
        clean_line = line.rstrip('\r\n')
        strip_line = clean_line.strip()
        # 跳过空行
        if not strip_line:
            continue
        # 识别到新的日期行
        if date_match_rule.match(strip_line):
            # 先把上一条攒好的记录写入文件
            if current_date is not None:
                fout.write(f"{current_date}, {', '.join(current_text_list)}\n")
            # 重置暂存变量,开始记录新条目
            current_date = strip_line
            current_text_list = []
        else:
            # 普通文本行追加到当前条目列表
            current_text_list.append(strip_line)
    # 写入最后一条记录
    if current_date is not None:
        fout.write(f"{current_date}, {', '.join(current_text_list)}\n")

注意事项

  • 用列表存储同组文本片段,比直接做字符串拼接效率更高,也不会出现末尾多余逗号的问题
  • 如果你的文件编码不是utf-8(比如gbk),修改open函数里的encoding参数即可
  • 代码里的日期匹配规则是严格按照你给出的示例写的,如果实际日期格式有变化,调整正则规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:18:24