[英]Loading UTF-8 file in Python 3 using numpy.genfromtxt()
我正在嘗試在python3中使用numpy.genfromtxt()
讀取包含不同日期數據的文件。 該文件基本上看起來像
Date,Open,High,Low,Close,Volume
1-Apr-15,108.33,108.66,108.33,108.66,290
但可能包含標記為-
缺失值。
以下代碼在python2中工作正常
str2date = lambda x: datetime.strptime(x, '%d-%b-%y').strftime('%Y-%m-%d')
data = np.genfromtxt('test.dat', dtype="S9,f8,f8,f8,f8,f8", delimiter=',', names=True, missing_values='-', converters={0: str2date})
但在python3中失敗
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
locale.getpreferredencoding(False)
返回UTF-8作為默認編碼,並且通過為建議的輸入流設置編碼來建議解決方案,例如, 此處有點棘手。 我也嘗試設置終端的編碼沒有成功。 我還必須承認,由於文件中不包含特殊字符,因此我在此答案中看不到解決問題的方法,或者至少我看不到它們。
我如何解決這個問題而又不退回到python2?
當我嘗試重現您的代碼時,日期轉換出現問題:
Out[405]: b'1-Apr-15'
In [406]: str2date(_)
---------------------------------------------------------------------------
...
----> 1 str2date = lambda x: datetime.strptime(x, '%d-%b-%y').strftime('%Y-%m-%d')
TypeError: strptime() argument 1 must be str, not bytes
如果我添加一個decode
:
def foo(x):
return str2date(x.decode())
轉換器處理genfromtxt
堅持提供的字節字符串。
In [410]: data = np.genfromtxt('stack47619155.txt', dtype="S9,f8,f8,f8,f8,f8",
...: delimiter=',', names=True, missing_values='-', converters={0: foo})
In [411]: data
Out[411]:
array([(b'2015-04-0', 108.33, 108.66, 108.33, 108.66, 290.),
(b'2015-04-0', nan, 108.66, nan, 108.66, 290.),
(b'2015-04-0', 108.33, 108.66, 108.33, 108.66, nan)],
dtype=[('Date', 'S9'), ('Open', '<f8'), ('High', '<f8'), ('Low', '<f8'), ('Close', '<f8'), ('Volume', '<f8')])
In [412]: data = np.genfromtxt('stack47619155.txt', dtype="U9,f8,f8,f8,f8,f8",
...: delimiter=',', names=True, missing_values='-', converters={0: foo})
In [413]: data
Out[413]:
array([('2015-04-0', 108.33, 108.66, 108.33, 108.66, 290.),
('2015-04-0', nan, 108.66, nan, 108.66, 290.),
('2015-04-0', 108.33, 108.66, 108.33, 108.66, nan)],
dtype=[('Date', '<U9'), ('Open', '<f8'), ('High', '<f8'), ('Low', '<f8'), ('Close', '<f8'), ('Volume', '<f8')])
這是一個不同的錯誤,所以我可能使用了一個不同的-
作為是否缺少字段標記。
您發現了我幾年前在轉換器中decode
帖子:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.