المشكلة: قراءة ملفات .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