我正在开发一个科学的绘图脚本,该脚本旨在从Agilent的Chemstation软件输出的csv文件中创建图形。
当文件来自Chemstation的一个版本(用于液相色谱的版本)时,我使脚本工作得很好。
现在我正试着把它移植到我们的GC (气相色谱法)上。由于某种原因,此版本的chemstation在其输出的任何文本文件中的每个字符之间插入空值。
我试图使用numpy.genfromtxt将x,y数据输入python,以便创建图形(使用matplotlib)。
我最初用的是:
data = genfromtxt(directory+signal, delimiter = ',') 来加载数据。当我用我们的GC生成的csv文件做这件事时,我会得到一个所有'nan‘值的数组。如果我将dtype设置为none,则会得到如下所示的“字节字符串”:
b'\x00 \x008\x008\x005\x00.\x002\x005\x002\x001\x007\x001\x00\r'我需要的是一个浮点数,上面的字符串是885.252171。
有人知道我该怎么去吗?
为了明确起见,我在Chemstation上找不到任何会影响它的输出的设置,只是没有创建带有null的文件。
谢谢
杰夫
发布于 2014-07-23 03:27:15
如果您的文件使用BOM编码为utf-16-le,并且所有实际unicode编码点(BOM除外)都小于128个,那么您应该能够使用codecs.EncodedFile实例将文件从utf-16转换为ascii。下面的示例适用于我。
这是我的测试文件:
$ cat utf_16_le_with_bom.csv
??2.0,19
1.5,17
2.5,23
1.0,10
3.0,5前两个字节,ff和fe是BOM U+FEFF:
$ hexdump utf_16_le_with_bom.csv
0000000 ff fe 32 00 2e 00 30 00 2c 00 31 00 39 00 0a 00
0000010 31 00 2e 00 35 00 2c 00 31 00 37 00 0a 00 32 00
0000020 2e 00 35 00 2c 00 32 00 33 00 0a 00 31 00 2e 00
0000030 30 00 2c 00 31 00 30 00 0a 00 33 00 2e 00 30 00
0000040 2c 00 35 00 0a 00
0000046下面是python脚本genfromtxt_utf16.py (为Python3更新):
import codecs
import numpy as np
fh = open('utf_16_le_with_bom.csv', 'rb')
efh = codecs.EncodedFile(fh, data_encoding='ascii', file_encoding='utf-16')
a = np.genfromtxt(efh, delimiter=',')
fh.close()
print("a:")
print(a)对于python 3.4.1和numpy 1.8.1,脚本工作如下:
$ python3.4 genfromtxt_utf16.py
a:
[[ 2. 19. ]
[ 1.5 17. ]
[ 2.5 23. ]
[ 1. 10. ]
[ 3. 5. ]]请确保没有将编码指定为file_encoding='utf-16-le'。如果包含endian后缀,则BOM不会被删除,并且不能将其转换为ascii。
https://stackoverflow.com/questions/24900247
复制相似问题