簡體   English   中英

如何在python numpy.bytes_類型上使用split()? (從文件中讀取字典)

[英]how to use split() on python numpy.bytes_ type? (read dictionary from file)

我想從一個(非常大的,空白分隔的,兩列)文本文件中讀取數據到Python字典中。 我嘗試使用for循環執行此操作,但這太慢了。 用numpy loadtxt讀取它到結構數組然后將其轉換為字典會更快!

data = np.loadtxt('filename.txt', dtype=[('field1', 'a20'), ('field2', int)], ndmin=1)
result = dict(data)

但這肯定不是最好的方法嗎? 有什么建議?

我需要別的東西的主要原因是以下不起作用:

data[0]['field1'].split(sep='-')

它會導致錯誤消息:

TypeError: Type str doesn't support the buffer API

如果存在split()方法,為什么我不能使用它? 我應該使用不同的dtype嗎? 或者是否有不同的(快速)方式來讀取文本文件? 還有什么我想念的嗎?

版本:python版本3.3.2 numpy版本1.7.1

編輯:更改data['field1'].split(sep='-')data[0]['field1'].split(sep='-')

標准庫split返回可變數量的參數,具體取決於在字符串中找到分隔符的次數,因此不太適合數組操作。 順便說一下,我的char numpy數組(我正在運行1.7)沒有split方法。

你有np.core.defchararray.partition ,它類似但對矢量化沒有任何問題,以及所有其他字符串操作

>>> a = np.array(['a - b', 'c - d', 'e - f'], dtype=np.string_)
>>> a
array(['a - b', 'c - d', 'e - f'], 
      dtype='|S5')
>>> np.core.defchararray.partition(a, '-')
array([['a ', '-', ' b'],
       ['c ', '-', ' d'],
       ['e ', '-', ' f']], 
      dtype='|S2')

因為: type(data[0]['field1'])給出<class 'numpy.bytes_'> ,當它有一個“普通”字符串作為參數時, split()方法不起作用(這是一個bug?)

我解決它的方式: data[0]['field1'].split(sep=b'-') b'-')(關鍵是將b放在' - '前面)

當然,Jaime建議使用以下內容非常有用: np.core.defchararray.partition(a, '-')但在這種情況下,需要使用b'-'才能使其正常工作。

事實上,這里回答了一個相關的問題: 類型str不支持緩沖區API,雖然乍一看我沒有意識到這是同一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM