بيئة
عند استدعاء numpy.loadtxt
في ملف يحتوي على سلاسل كالتالي:
import numpy as np
datestxt = np.loadtxt("NYSE_dates.txt", dtype=str)
print(datetxt)
حيث يكون NYSE_dates.txt مجرد قائمة تواريخ (يمكن أن يكون أي شيء حقًا):
7/5/1962
7/6/1962
7/9/1962
...
12/29/2020
12/30/2020
12/31/2020
الإخراج هو:
["b'7/5/1962'" "b'7/6/1962'" "b'7/9/1962'" ..., "b'12/29/2020'"
"b'12/30/2020'" "b'12/31/2020'"]
كما ترى ، تم تشكيل جميع السلاسل بواسطة بايت ، ثم تم ترتيبها من خلال conv
، حيث ستحصل على نفس النتيجة من str(str('12/31/2020').encode('latin1'))
، لكل conv
& compat.asbytes
.
بعد النظر إلى الكود ، يبدو أن كل السلاسل مصبوبة بالبايت بـ asbytes(...)
حد كبير في كل مكان ، على سبيل المثال في split_line(...)
، لذلك يجب أن يعني هذا أن كل روتين في الوحدة معطل.
أنا أيضا لدي هذه المشكلة. هذا أمر مزعج للغاية ؛ في الأساس لا يمكنك استخدام loadtxt في Python3.
حل مؤقت: قمت بإزالة جميع مكالمات asbytes () في طريقة loadtxt.
نعم ، أتذكر أنني كنت أفكر في أن شيئًا ما كان مريبًا هناك عندما نظرت في الكود.
بالنسبة للسجل ، أواجه نفس المشكلة مع مدخلات datetime64 ، مما أدى إلى خطأ تحليل للنموذج: Error parsing datetime string "b'2013-01-02'"
. للتغلب على هذا ، كان علي إنشاء محول لهذا العمود:
def decoder(input_bytes):
return input_bytes.decode("ascii")
سيكون هذا جيدًا في كود الإنتاج ولكنه غير جميل للغاية بالنسبة لمواد التدريب ...
دفع إلى 1.11.
حل بديل - قم بتشغيل iconv على الملف أولاً.
دفع من 1.12.
أرى أنه يتم دفع هذا إلى الأمام ، لكنني أجد أن هذا خطأ يجب معالجته ، ويبدو أن الإصلاح يمكن تنفيذه بسهولة.
صادم جدًا أن هذا لم يتم إصلاحه لمدة 5 سنوات
يبدو أن هذا يعمل كما هو مطلوب في NumPy 1.13.3 (على الرغم من أنني لست متأكدًا من العلاقات العامة التي تم إصلاحها). هل يمكن إغلاق هذه القضية؟
>>> import io
>>> import numpy as np
>>> f = io.StringIO("7/5/1962\n7/6/1962\n")
>>> np.loadtxt(f, dtype=str)
array(['7/5/1962', '7/6/1962'],
dtype='<U8')
>>> np.__version__
'1.13.3'
يبدو أن هذا تم إصلاحه في # 8349 ، ردًا على # 8033.
إغلاق. يرجى إعادة الفتح إذا لزم الأمر.
التعليق الأكثر فائدة
صادم جدًا أن هذا لم يتم إصلاحه لمدة 5 سنوات