2014-07-23 66 views
0

我正在研究科學圖形腳本,旨在從安捷倫化學工作站軟件輸出的csv文件創建圖形。numpy.genfromtxt具有空字符的csv文件

當文件來自Chemstation的一個版本(液相色譜版本)時,我得到了完美的腳本。

現在我試圖將它移植到我們的GC(氣相色譜)上。出於某種原因,這個版本的化學工作站在它輸出的任何文本文件中的每個字符之間插入了空值。

我想使用numpy.genfromtxt將x,y數據轉換爲python以創建圖形(使用matplotlib)。

我最初使用:

data = genfromtxt(directory+signal, delimiter = ',') 

在加載數據。當我做到這一點與我們的GC生成CSV文件,我得到的所有「南」值的數組。如果我設置的D型爲無,我得到「字節串」看起來像這樣:

b'\x00 \x008\x008\x005\x00.\x002\x005\x002\x001\x007\x001\x00\r' 

我需要的是一個浮動,對於上面的字符串這將是885.252171。

任何人都有任何想法我可以得到我需要去的地方?

只是要清楚,我無法在化學工作站上找到任何影響其輸出結果而不是用空值創建文件的設置。

感謝

傑夫

+0

沒有設置來控制Chemstation生成的文件的編碼?這聽起來像它可能使用UCS-2或UTF-16。 –

+0

文件是否以字節順序標記開頭(http://en.wikipedia.org/wiki/Byte_order_mark)?文件中的前三個字節是什麼? –

回答

1

鑑於您的文件編碼爲UTF-16樂具有BOM,所有的實際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 

前兩個字節,fffe是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(更新爲Python 3):

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,t他的劇本作品:

$ python3.4 genfromtxt_utf16.py 
a: 
[[ 2. 19. ] 
[ 1.5 17. ] 
[ 2.5 23. ] 
[ 1. 10. ] 
[ 3. 5. ]] 

請確保您沒有指定編碼爲file_encoding='utf-16-le'。如果包含了尾部後綴,BOM不會被剝離,並且不能轉碼爲ASCII。

+0

你大部分是正確的,它是用'utf-16le'編碼的。不幸的是,它看起來像你的方法不完全在python 3中工作。出於某種原因,它不會從文件的開頭刪除BOM,並因此崩潰嘗試將BOM編碼爲ASCII。我用另一種方法允許我將其刪除,但是您的方法似乎比我入侵它的方式更清晰,如果我至少能夠在發送到genfromtxt之前弄清楚如何刪除BOM ... – Analytical360

+0

奇怪。在python 2.7中,如果文件有BOM,我使用'utf-16'(沒有尾部後綴),並且它工作。如果我有機會嘗試python 3,我會讓你知道我找到了什麼。 –

+0

@ Analytical360:我更新了我的答案。它在Python 3.4.1中適用於我。 –

相關問題