سؤال

لذلك أحاول فهم الملف المصدر ل CSV2REC في matplotlib.mlab. يتم استخدامه لالتقاط ملف CSV وتحليل البيانات في تنسيقات معينة. لذلك قد يستغرق الأمر سلسلة "234" وتحويله إلى int. أو اتخاذ سلسلة تاريخ وجعله في ثياب القطار.

def get_converters(reader):

    converters = None
    for i, row in enumerate(reader):
        if i==0:
            converters = [mybool]*len(row)
        if checkrows and i>checkrows:
            break
        #print i, len(names), len(row)
        #print 'converters', zip(converters, row)
        for j, (name, item) in enumerate(zip(names, row)):
            func = converterd.get(j)
            if func is None:
                func = converterd.get(name)
            if func is None:
                #if not item.strip(): continue
                func = converters[j]
                if len(item.strip()):
                    func = get_func(name, item, func)
            else:
                # how should we handle custom converters and defaults?
                func = with_default_value(func, None)
            converters[j] = func
    return converters

مشكلتي مع هذه الوظيفة هي "المحولات". يبدأ قبالة لا شيء. ثم لاحقا "func = محولات [J] 'j أنا أعرف هو رقم يتم إنشاؤه فقط من خلال التعداد. لذلك يبحث عن عنصر المحولات المقابلة كما مفهرسة من J. ولكن لا يوجد شيء في المحولات لأنه ليس صحيحا؟ ما لم يكن يجب قراءتها برامج Python من أعلى إلى أسفل؟ في هذه الحالة، نحصل على Func من الأسطرين التاليين "إذا كان Len (item.st .... إلخ)" أو من قسم "آخر:". ولكن، افترضت للتو سيتعين قراءتها من أعلى إلى أسفل.

لا أعرف ما إذا كانت أي من الأشياء الأخرى مهمة لذلك تضمنت فقط الوظيفة بأكملها. Converterd هو رسم الخرائط القاموس وأعتقد أن المستخدم يمكن أن يوفر كمعلمة للعثور على محول تلقائيا. الغرائز هو مجرد رقم يقدمه المستخدم كمعلمة في البداية للتحقق من أجل الصلاحية. إنه افتراضيا بلا. ما زلت نوعا من المبتدئين، لذلك فقط FYI. =)

شكرا لكم جميعا. هذا الموقع مفيد جدا!

هل كانت مفيدة؟

المحلول

يحصل المحولات مرة أخرى في بداية الحلقة

if i==0:
  converters = [mybool]*len(row)

لذلك بعد ذلك ليس بعد الآن.

نصائح أخرى

ما لم أفتقد شيئا ما، في التكرار الأول "أنا" هو 0، لذلك يتم تنفيذ ما يلي:

converters = [mybool]*len(row)

وهذا تهيئة "المحولات"

أولاً،

converters = None

يحدد قيمة أولية ل converters. وبعد بهذه الطريقة، إذا كان التكرار لا يحدث (لأن readers قد تكون فارغة) ثم عندما ترجع الوظيفة converters سيكون موجودا ولدي القيمة None.

إذا كان التكرار readers يحدث، ثم converters يتم إعادة تعيين فورا إلى قيمة أكثر وضوحا في المرة الأولى عبر التكرار (متى i==0):

converters = [mybool]*len(row)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top