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

读取分隔符不一致的txt文件时numpy.loadtxt报错该如何处理

问题原因

存在两个核心错误:

  1. np.loadtxt 报错的直接原因:该方法第一个参数要求传入文件路径/类文件对象,你提前读取文件内容替换后得到的是纯字符串,传入后会被loadtxt判定为文件路径去读取,自然找不到对应文件触发IO错误。
  2. 最初列数识别异常的原因:你固定用两个空格作为分隔符,遇到1 -10这类「单个空格+负号」的组合时,会把1 -10识别为同一列,最终导致行列数不匹配。
解决方案

推荐优先使用第一种方案,逻辑更简洁兼容性更强:

方案1:使用loadtxt默认空白分隔逻辑(无需手动处理负号)

numpy.loadtxt 默认规则为任意数量的空白字符(空格、制表符、换行符等)都视为同一个分隔符,天然适配正负号前空格数量不一致的场景,无需提前处理文本,代码可直接简化为:

import numpy as np
import pandas as pd

# 无需指定delimiter,默认逻辑即可处理空格不统一的问题
data_02 = np.loadtxt('IEA-15-240-RWT_AeroDyn15_Polar_02.txt', skiprows=54, dtype=str, max_rows=200)
data_tab_02 = pd.DataFrame(data_02, columns=col_names2)
data_tab_02.to_excel('Raw_Data02.xlsx', sheet_name='02')

方案2:保留手动预处理逻辑的修复方法

如果确实需要提前修改文本内容,需要把处理后的字符串用io.StringIO包装为类文件对象再传入loadtxt:

import numpy as np
import pandas as pd
from io import StringIO

# 用with上下文管理器读取文件,自动释放资源
with open('IEA-15-240-RWT_AeroDyn15_Polar_02.txt', 'r') as f:
    raw_content = f.read().replace(' -', '  -')
# 将字符串包装为类文件对象
processed_file = StringIO(raw_content)
data_02 = np.loadtxt(processed_file, delimiter='  ', skiprows=54, dtype=str, max_rows=200)
data_tab_02 = pd.DataFrame(data_02, columns=col_names2)
data_tab_02.to_excel('Raw_Data02.xlsx', sheet_name='02')

补充优化点:np.loadtxt返回结果本身就是numpy数组,无需额外调用np.array()做二次转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:00:03