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

Python分割长消息文本文件:将消息字段拆分至CSV列

解决方案:将分隔式消息文本转换为结构化CSV

问题分析

你需要把以;分隔的消息文本,提取Sent:、From:、To:、Subject:标签对应的字段,以及消息正文,每条消息对应CSV的一行,各字段对应不同列。原代码仅按行分割写入,未做结构化提取,导致格式混乱。

实现代码

import csv
import re

# 定义正则匹配规则,一次性提取消息各字段
pattern = re.compile(
    r"Message (\d+) of \d+\s+"
    r"Sent:\s*(.+?)\s+"
    r"From:\s*(.+?)\s+"
    r"To:\s*(.+?)\s+"
    r"Subject:\s*(.+?)\s+"
    r"(.*)",
    re.DOTALL
)

with open("emails.txt", encoding="utf-8") as txt, open('theoutput.csv', 'w', newline='', encoding="utf-8") as csvfile:
    # 定义CSV表头
    fieldnames = ['ID', 'Sent', 'From', 'To', 'Subject', 'Body']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    # 读取整个文本,按;分割成单个消息块,过滤空内容
    content = txt.read()
    messages = [msg.strip() for msg in content.split(';') if msg.strip()]

    for msg in messages:
        match = pattern.match(msg)
        if match:
            msg_id = match.group(1)
            # 处理正文:去除多余换行和空格,合并为单行
            body = ' '.join(line.strip() for line in match.group(6).splitlines() if line.strip())
            # 写入结构化数据到CSV
            writer.writerow({
                'ID': msg_id,
                'Sent': match.group(2).strip(),
                'From': match.group(3).strip(),
                'To': match.group(4).strip(),
                'Subject': match.group(5).strip(),
                'Body': body
            })

代码说明

  1. 正则匹配:启用re.DOTALL模式让.匹配换行符,一次性捕获消息ID、发送时间、发件人、收件人、主题和正文。
  2. 消息分割:读取完整文本后用;分割,过滤空块避免无效数据。
  3. 正文处理:将正文中的换行和冗余空格替换为单个空格,保证正文在CSV中为单行格式。
  4. CSV写入:使用DictWriter按表头映射字段,确保各数据对应正确列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:24:54