"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التعامل بشكل فعال مع ملفات CSV الكبيرة في Python 2.7؟

كيفية التعامل بشكل فعال مع ملفات CSV الكبيرة في Python 2.7؟

نشر في 2025-03-05
تصفح:793

How to Effectively Handle Large CSV Files in Python 2.7?

قراءة ملفات .CSV كبيرة في Python

المشكلة: قراءة ملفات .csv ضخمة (تصل إلى مليون صف ، و 200 عمود) في python 2.7 يواجه أخطاء الذاكرة. ومع ذلك ، تصبح هذه الطريقة غير عملية بالنسبة للملفات الكبيرة ، لأنها تستهلك الذاكرة المفرطة.

الحل:

معالجة صفوفها عند إنتاجها:

تجنب تحميل الملف بأكمله في الذاكرة. بدلاً من ذلك ، صفوف المعالجة عند إنشاؤها باستخدام وظيفة المولد. def getStuff (اسم الملف ، المعيار): مع Open (اسم الملف ، "RB") كـ CSVFILE: DataReader = CSV.Reader (CSVFILE) العائد التالي (DataReader) # عائد صف الرأس للصف في DataReader: إذا كان الصف [3] == المعيار: RIDE ROW

2. استخدم وظائف المولد للتصفية:
def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield the header row
        for row in datareader:
            if row[3] == criterion:
                yield row

تصفية البيانات أثناء التكرار من خلال الملف باستخدام وظائف المولد. يسمح هذا النهج بمطابقة صفوف متعددة متتالية تلبي معيارًا محددًا. def getstuff (اسم الملف ، المعيار): مع Open (اسم الملف ، "RB") كـ CSVFILE: DataReader = CSV.Reader (CSVFILE) العائد التالي (DataReader) # عائد صف الرأس العائد من Takehile ( Lambda R: R [3] == معيار ، Dropwhile (Lambda R: R [3]! = Criterion ، DataReader))) إرجاع

3. تحسين استهلاك الذاكرة:
def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield the header row
        for row in datareader:
            if row[3] == criterion:
                yield row

refactor getData () لاستخدام وظيفة المولد أيضًا ، مع التأكد من أن صفًا واحدًا فقط في الذاكرة في أي وقت. لمعايير المعايير: للصف في getstuff (اسم الملف ، المعيار): العائد على صف

نصائح إضافية للسرعة:
def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield the header row
        for row in datareader:
            if row[3] == criterion:
                yield row

في قاعدة بيانات لمعالجة أسرع وأكثر كفاءة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3