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

如何在Python中解析基于位置的.txt文件并合并关联行?

固定位置格式文本转DataFrame及多行合并方案

一、需求说明

现有数千条位置固定格式的.txt文本行,常规行固定为56字符,各字段对应固定索引范围:

  • Field1:[0:14]
  • Field2:[15:31]
  • Field3:[32:35]
  • Field4:[36:53]
  • Field5:[54:56]

需将其转换为指定结构的DataFrame,同时处理特殊场景:满足特定条件时,会有不同长度的两行对应同一数据,需合并为单行。

二、实现代码

使用Python的pandas库处理,代码如下:

import pandas as pd

# 定义字段与切片范围对应关系(Python切片左闭右开,需匹配需求中的位置)
field_mapping = {
    "Field1": slice(0, 15),   # 对应需求中的[0:14]
    "Field2": slice(15, 32),  # 对应需求中的[15:31]
    "Field3": slice(32, 36),  # 对应需求中的[32:35]
    "Field4": slice(36, 54),  # 对应需求中的[36:53]
    "Field5": slice(54, 57)   # 对应需求中的[54:56]
}

# 读取文本文件
with open("your_file.txt", "r", encoding="utf-8") as f:
    raw_lines = [line.strip() for line in f if line.strip()]

processed_data = []
index = 0
total_lines = len(raw_lines)

while index < total_lines:
    current_line = raw_lines[index]
    # 处理常规56字符行或需合并的主行
    if len(current_line) == 56:
        # 判断下一行是否为附加行(可根据实际条件调整,这里用长度非56作为判断)
        if index + 1 < total_lines and len(raw_lines[index+1]) != 56:
            # 合并主行与附加行
            combined_content = current_line + raw_lines[index+1]
            row = {}
            for field, slice_range in field_mapping.items():
                if field == "Field4":
                    # 将附加内容合并到Field4(可根据需求调整字段)
                    row[field] = combined_content[slice_range] + combined_content[56:]
                else:
                    row[field] = combined_content[slice_range]
            # 可选:新增字段单独存储附加内容
            row["附加信息"] = raw_lines[index+1]
            processed_data.append(row)
            index += 2  # 跳过已处理的附加行
        else:
            # 常规单行提取字段
            row = {field: current_line[slice_range] for field, slice_range in field_mapping.items()}
            processed_data.append(row)
            index += 1
    else:
        # 处理异常行(单独出现的附加行,可根据需求调整逻辑)
        index += 1

# 转换为DataFrame
result_df = pd.DataFrame(processed_data)
# 查看结果
print(result_df.head())

三、代码说明

  1. 字段映射:通过slice对象定义每个字段对应的文本索引范围,适配Python的左闭右开切片规则。
  2. 文件读取:读取所有行并去除空行、换行符,避免无效数据干扰。
  3. 多行合并逻辑:通过循环遍历,判断当前行是否为需合并的主行,若下一行是附加行则合并后提取字段;可根据实际需求调整合并条件(比如用特定字段值判断,而非长度)。
  4. DataFrame转换:将处理后的字典列表转换为DataFrame,直接得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:40:23