Numpy: npyio.loadtxt هو إدخال ملف نصي من خلال تحويل البايت ، حتى مع تحديد نوع str dtype.

تم إنشاؤها على ٨ نوفمبر ٢٠١٢  ·  11تعليقات  ·  مصدر: numpy/numpy

بيئة

  • Python: الإصدار 3.3 (إصدار python.org) على OS X Mountain Lion
  • numpy: مستنسخ من git master

عند استدعاء 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(...) ، لذلك يجب أن يعني هذا أن كل روتين في الوحدة معطل.

00 - Bug numpy.lib

التعليق الأكثر فائدة

صادم جدًا أن هذا لم يتم إصلاحه لمدة 5 سنوات

ال 11 كومينتر

أنا أيضا لدي هذه المشكلة. هذا أمر مزعج للغاية ؛ في الأساس لا يمكنك استخدام 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.

إغلاق. يرجى إعادة الفتح إذا لزم الأمر.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات