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

Python使用.split()提取字符串值时处理短字符串的方案咨询

文本文件读取构建DataFrame的索引错误解决方案

问题背景

需从文本文件读取字符串列表,对每行调用.split()后提取[0][1][5][6]位置的值,构建包含Sample、Compound、Value列的DataFrame。现有代码遇到仅含空格的行时,因.split()后列表长度不足触发IndexError: list index out of range,要求此类情况填充-1。

改进后的代码

import pandas as pd

# 用列表存储数据,比逐行append更高效
data_list = []
path_to_file = r"...\CL 23-07 M1.txt"

with open(path_to_file, 'r') as f:
    lines = f.readlines()
    # 预提取Sample名称(仅读取第7行一次,索引从0开始)
    name_gral = "-1"
    if len(lines) > 6:
        name_gral_split = lines[6].split()
        if len(name_gral_split) >= 4:
            name_gral = name_gral_split[3]

    for line in lines:
        line_split = line.split()
        # 处理短行/空行的情况
        if len(line_split) >= 7:
            cmp = line_split[0]
            val = line_split[1]
            # 若需同时提取[5][6]生成额外行,可在此处添加对应append逻辑
        else:
            cmp = "-1"
            val = "-1"
        
        data_list.append({
            "Sample": name_gral,
            "Compound": cmp,
            "Value": val
        })

# 一次性构建DataFrame
df_final = pd.DataFrame(data_list)
print(df_final)

关键改进点

  • 减少重复操作:将Sample名称提取移至循环外,仅执行一次,提升效率
  • 规避索引错误:通过判断line_split长度,对短行/空行自动填充-1
  • 优化性能:用列表收集所有数据后一次性创建DataFrame,比df.append()更高效(数据量大时差异明显)
  • 边界防护:增加文件行数不足的判断,避免读取lines[6]时触发索引错误

扩展:同时提取[5][6]生成多行

如果需要把[0][1]和[5][6]都作为独立行存入DataFrame,可修改循环内逻辑:

for line in lines:
    line_split = line.split()
    if len(line_split) >= 7:
        # 处理[0][1]
        data_list.append({
            "Sample": name_gral,
            "Compound": line_split[0],
            "Value": line_split[1]
        })
        # 处理[5][6]
        data_list.append({
            "Sample": name_gral,
            "Compound": line_split[5],
            "Value": line_split[6]
        })
    else:
        data_list.append({
            "Sample": name_gral,
            "Compound": "-1",
            "Value": "-1"
        })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:03:32