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
相关产品推荐
相关产品推荐

