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

