读取分隔符不一致的txt文件时numpy.loadtxt报错该如何处理
问题原因
存在两个核心错误:
np.loadtxt报错的直接原因:该方法第一个参数要求传入文件路径/类文件对象,你提前读取文件内容替换后得到的是纯字符串,传入后会被loadtxt判定为文件路径去读取,自然找不到对应文件触发IO错误。- 最初列数识别异常的原因:你固定用两个空格作为分隔符,遇到
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
相关产品推荐
相关产品推荐

