文本导入过程中标题行中的特殊字符

时间:2018-06-19 21:44:50

标签: python numpy genfromtxt

我正在尝试编写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)

1 个答案:

答案 0 :(得分:1)

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

我的猜测是 real 问题是您的CSV使用的是Latin-1或与Windows-1252类似的Latin-1兼容编码,并且标头之一包含微符号µ,在这些编码中为0xB5。还是标题实际上根本不是问题,并且在某些数据中您有µ个字符。

无论哪种方式,使用默认的ASCII编码,都会出现关于0xb5不在range(128)中的错误,就像问题中的错误一样。

如果您尝试通过显式指定encoding='utf-8'来解决此问题,那是错误的编码,并且您会遇到其他错误,例如0xb5是无效的起始字节。

如果通过指定encoding='latin-1'对其进行修复,则它应该可以工作。

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

生成它们的程序应记录其使用的编码,或具有可供选择的选项。如果不是,则需要尝试,例如,在文本编辑器中查看文件,该文件可让您选择编码以尝试找出哪个看起来正确。或者,您可以使用chardet之类的工具来帮助您进行猜测。