使用STDF2DataFrame转换93k测试仪STDF至Pandas时触发TypeError
93k测试仪STDF文件转Pandas DataFrame报错处理
复现代码
import sys, os from pystdf.Importer import STDF2DataFrame import pystdf.V4 as V4 import pandas as pd fin = 'Ex.stdf' dfs= STDF2DataFrame(fin)
报错信息
回溯(最近的调用最后): 文件 "C:\Users\user\Documents\Temp\module2.py", 第10行, in <module> dfs= STDF2DataFrame(fin) ^^^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\Importer.py", 第73行, in STDF2DataFrame data = ImportSTDF(fname) ^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\Importer.py", 第42行, in ImportSTDF p.parse() 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第190行, in parse self.parse_records(count) 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第162行, in parse_records fields = recParser(self, header, []) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第36行, in newRecordParser fields.append(action(*args)) ^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第202行, in <lambda> return lambda self, header, fields: parseFn(header, fieldType) ^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第238行, in <lambda> "Vn": lambda header, fmt: self.readVn(header) ^^^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第115行, in readVn vn.append(self.vnMap[fldtype](header)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "C:\Anaconda\Lib\site-packages\pystdf\IO.py", 第246行, in <lambda> 0: lambda header: self.inp.read(header, 1), ^^^^^^^^^^^^^^^^^^^^^^^^ 类型错误:read方法最多接受1个参数,但传入了2个
问题分析与解决办法
这个错误源于pystdf库的IO模块中,错误地给文件对象的read方法传入了两个参数,而Python标准文件对象的read仅接受1个参数(指定读取字节数)。
可行的解决途径:
- 降级pystdf版本:该问题多为版本兼容性问题,执行
pip install pystdf==1.0.0安装稳定版本即可解决 - 修改库源码:找到Anaconda环境下pystdf的IO.py文件(路径如报错信息所示),将第246行的
self.inp.read(header, 1)改为self.inp.read(1),这里的header参数实际无作用,仅需读取1字节 - 替换兼容库:改用
stdf或py-stdf等对93k测试仪STDF文件支持更好的库
内容的提问来源于stack exchange,提问作者Dima Mintsman
相关产品推荐
相关产品推荐

