文本导入期间标题行中的特殊查找器



我正在尝试编写一个python脚本来导入由数据采集软件(EC-lab(生成的数据文件。我想保持列标题在文件中的位置,而不是手动定义它们,因为它们在所有文件中并不统一(不同的技术将以不同的顺序生成数据,并且具有不同数量的标题(。问题是文件中的标题文本包含正斜杠(例如"ox/red"、"time/s"(。

当我尝试使用标题列加载数据时,我收到 ascii 错误

UnicodeDecodeError:"ascii"编解码器无法解码位置 19 中的字节0xb5:序号不在范围内(128(

我尝试将编码添加为基于其他解决方案的关键字参数,但这并没有产生解决方案

data = np.genfromtxt("20180611_bB_GCE-G.mpt", dtype=None, delimiter='t', names=True, skip_header=61, encoding='utf-8')

我目前正在使用 genfromtxt 作为数据导入技术

data = np.genfromtxt("filename.mpt", dtype=None, delimiter='t', names=True, skip_header=61)

首先,标头中的正斜杠对于 ASCII、CSV 文件或 NumPy 来说不是问题。

我的猜测是,真正的问题是您的CSV是拉丁语-1,或像Windows-1252这样的拉丁语-1兼容编码,并且其中一个标头包括微符号µ,这是在这些编码中0xB5的。或者标题实际上根本不是问题,并且您在某些数据中有µ字符。

无论哪种方式,使用 ASCII 的默认编码,您都会收到一个错误,即0xb5不在range(128)中,就像您问题中的错误一样。

如果您尝试通过显式指定encoding='utf-8'来解决此问题,那是错误的编码,您只会得到一个不同的错误,关于0xb5是一个无效的起始字节。

如果通过指定encoding='latin-1'来修复它,它应该可以工作。

更一般地说,您必须知道文件的实际编码方式,而不仅仅是胡乱猜测。特别是如果你在Windows上,很多文件将采用你设置为OEM代码页的任何编码,而其他文件将是UTF-16-LE,而其他文件将是UTF-8,但带有非法BOM等。

生成它们的程序应该记录它使用的编码,或者有选项让你选择。如果没有,您需要尝试,例如,在文本编辑器中查看文件,该编辑器允许您选择编码以尝试找出哪个看起来正确。或者您可以使用像chardet这样的工具来帮助您猜测。

相关内容

  • 没有找到相关文章

最新更新