2013-01-23 38 views
0

我試圖讀取使用Python奇怪的字符串格式化後閱讀()蟒蛇

open('/Desktop/test.csv','rb').read()[1:15] 

一個文件,我得到返回類似:

'\xfeY\x00!\x00B\x00L\x00-\x00 \x00B' 

即使當我打開test.csv雖然在文本編輯器中它是可讀的字符串格式。有誰知道這是什麼格式,以及如何將其轉換回字符串?謝謝!

+0

您切片的第一個字節,最大的提示被遺漏了! :-P –

回答

2

該文件使用UTF-16編碼。

>>> open('/Desktop/test.csv', 'r', encoding='UTF-16').read(7) 
'Y!BL- B' 

或者,如果你還在使用老的Python版本,

>>> import codecs 
>>> codecs.open('/Desktop/test.csv', 'r', encoding='UTF-16').read(7) 
u'Y!BL- B' 

還要注意的是Python使用從零開始的索引,像大多數其他語言(C,Java和C#,JavaScript的,等...)

>>> 'abcdefghijklmnopqrstuvwxyz'[1:15] 
'bcdefghijklmno' # Omits the 'a', which is at index 0 
+0

對於'7':) +1 – root

1

沒有什麼奇怪的,一切都很好。 Python是使用\x00轉義序列來表示不可打印的字符:

>>> '\x00' 
'\x00' 
>>> len('\x00') 
1 
>>> '\x65' 
'e' 

注意如何十六進制字符65印刷爲e;畢竟它是一個可打印的ASCII字母。

您的數據可能被編碼爲與ASCII不同的東西;嘗試用UTF-16解碼它。前1個字節看起來像是我的UTF-16 BOM的第二個字節:

>>> import codecs 
>>> codecs.BOM_UTF16 
'\xff\xfe'