(पहली पंक्ति) नामित आइटम की एक बड़ी सूची पर विचार करें एक बड़ी csv फ़ाइल (80 एमबी) संभव बाधित रिक्तिपहुंच सूची
name_line = ['a',,'b',,'c' .... ,,'cb','cc']
मैं के शेष पढ़ रहा हूँ के साथ से लौटे रेखा से लाइन में डेटा और मुझे केवल इसी नाम के साथ डेटा संसाधित करने की आवश्यकता है। डेटा
data_line = ['10',,'.5',,'10289' .... ,,'16.7','0']
मैंने इसे दो तरीकों से आजमाया। एक पढ़ा
blnk_cols = [1,3, ... ,97]
while data:
...
for index in blnk_cols: data_line.pop(index)
अन्य डेटा में एल 1
good_cols = [0,2,4, ... ,98,99]
while data:
...
data_line = [data_line[index] for index in good_cols]
से एक नाम के साथ जुड़े आइटम संकलन है मैं उपयोग कर रहा हूँ वहाँ निश्चित रूप से अधिक अच्छा होगा की प्रत्येक पंक्ति से खाली कॉलम पॉपिंग है लाइनें तो खराब लाइनें हालांकि यह आधा और आधा जितना ऊंचा हो सकता है।
मैंने गति में अपने सबसे कमजोर लिंक निर्धारित करने के लिए cProfile और pstats पैकेज का उपयोग किया जो सुझाव दिया कि पॉप वर्तमान धीमी वस्तु थी। मैं सूची COMP में स्विच किया और समय लगभग दोगुना हो गया।
मुझे लगता है कि एक तेज़ तरीका केवल अच्छा डेटा पुनर्प्राप्त करने वाले सरणी को टुकड़ा करना होगा, लेकिन यह रिक्त और अच्छे डेटा के साथ फ़ाइलों के लिए जटिल होगा।
क्या मैं वास्तव में जरूरत है
data_line = data_line[good_cols]
प्रभावी ढंग से उन वस्तुओं वापस पाने के लिए एक सूची में सूचकांक की एक सूची गुजर करने में सक्षम हो रहा है। अभी मेरा प्रोग्राम 10 एमबी फ़ाइल के लिए लगभग 2.3 सेकंड में चल रहा है और पॉप लगभग 3 सेकंड के लिए खाता है।
क्या सूची में कुछ स्थानों तक पहुंचने का कोई तेज़ तरीका है। सी में यह केवल सरणी में सही सूचकांक के पॉइंटर्स की एक सरणी को संदर्भित करेगा।
परिवर्धन: फ़ाइल में name_line से पहले पढ़
a,b,c,d,e,f,g,,,,,h,i,j,k,,,,l,m,n,
name_line के बाद पढ़ने के लिए और विभाजन (",")
['a','b','c','d','e','f','g','','','','','h','i','j','k','','','','l','m','n','\n']
डेटा_लाइन के साथ आप क्या कर रहे हैं? क्या आप इसे फिर से कर रहे हैं? क्या आप इसे किसी अन्य डेटास्ट्रक्चर में डाल रहे हैं? – Marcin
इसके अलावा, क्या आपने जनरेटर की कोशिश की है? – Marcin
"एक बड़ी सीएसवी फ़ाइल से लौटाई गई बड़ी सूची पर विचार करें"? क्या आप ** संपूर्ण ** फ़ाइल को एक सूची में पढ़ रहे हैं? क्यूं कर? प्रत्येक पंक्ति को व्यक्तिगत रूप से क्यों संसाधित नहीं करते? –