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

Python实现固定长度拆分文本行并识别相邻字段

解决固定宽度文本字段拆分与相邻值查找问题

问题分析

原代码存在以下核心错误:

  • 错误遍历单个字符而非文本行:for lines in parts: 中parts是整个文件的字符串,迭代得到的是单个字符,无法处理整行数据
  • 错误使用整个文件内容拆分而非当前行:拆分逻辑没有针对当前处理的行,而是对整个文件内容进行切割,完全偏离需求
  • 未处理字段的前后空白:原文件中"Steel"所在字段是10字符宽度,实际内容为 Steel(前有5个空格),直接查找"Steel"会匹配失败

正确实现方案

以下代码实现了按10字符宽度拆分每行,并查找指定字段的相邻值:

import os

ModelPath = r'D:\pyLearning\Read_all_files'
include_file = "_K3_Controls.k"
include_file_path = os.path.join(ModelPath, include_file)

# 目标字段
target = "Steel"
field_width = 10

with open(include_file_path, 'r') as include_kfile:
    # 按行读取文件
    for line in include_kfile:
        line = line.strip('\n')  # 去掉换行符,保留行内的空格
        # 跳过注释行和空行
        if line.startswith('$#') or not line:
            continue
        
        # 按固定10字符宽度拆分当前行
        splits = [line[i:i+field_width] for i in range(0, len(line), field_width)]
        # 处理每个字段:去除前后空白,过滤空字符串
        processed_fields = [field.strip() for field in splits if field.strip()]
        
        print("Worked", processed_fields)
        
        # 查找目标字段并获取相邻值
        try:
            idx = processed_fields.index(target)
            if idx + 1 < len(processed_fields):
                next_val = processed_fields[idx + 1]
                print(f"{target} = {next_val}")
        except ValueError:
            # 目标字段不在当前行,跳过
            pass

print("finished")

代码说明

  • 使用for line in include_kfile直接按行迭代文件对象,避免一次性读取大文件的内存问题
  • 按field_width=10对每行进行切片拆分,确保每个字段对应固定宽度
  • 用strip()去除字段前后的空白字符,同时过滤掉全空白的无效字段
  • 查找目标字段时,先判断索引是否越界,避免IndexError

预期输出

运行后会得到符合需求的结果:

Worked ['1', '2', '0.0', '5', '0', '0.0']
Worked ['Steel', '8000.000', '2.0000e+11', '0.300000', '0.0', '0.0', '0.0']
Steel = 8000.000
finished

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:35