पर पुन: प्रयास करने के लिए सबसे प्रभावी तरीका मैं दो फाइलों के माध्यम से जाने के लिए एक पायथन स्क्रिप्ट पर काम कर रहा हूं - जिसमें यूयूआईडी की एक सूची है, जिसमें बड़ी संख्या में लॉग प्रविष्टियां हैं - प्रत्येक पंक्ति जिसमें अन्य फाइलों में से यूयूआईडी शामिल है। कार्यक्रम का उद्देश्य फ़ाइल 1 से यूयूआईडीएस की एक सूची बनाना है, फिर प्रत्येक बार जब यूयूआईडी लॉग फ़ाइल में पाया जाता है, तो मैच मिलने पर प्रत्येक बार संबंधित मान को बढ़ाएं।पाइथन में एक बड़ी फ़ाइल (10 जीबी +)
इतनी लंबी कहानी कम है, गिनती है कि लॉग फ़ाइल में प्रत्येक यूयूआईडी कितनी बार प्रकट होता है। फिलहाल, मेरे पास एक सूची है जो यूयूआईडी के साथ कुंजी के रूप में आबादी है, और मूल्य के रूप में 'हिट' है। फिर एक और लूप जो लॉग फ़ाइल की प्रत्येक पंक्ति पर पुनरावृत्त करता है, और जांच करता है कि लॉग में यूयूआईडी यूयूआईडी सूची में यूयूआईडी से मेल खाता है या नहीं। यदि यह मेल खाता है, तो यह मूल्य में वृद्धि करता है।
for i, logLine in enumerate(logHandle): #start matching UUID entries in log file to UUID from rulebase
if logFunc.progress(lineCount, logSize): #check progress
print logFunc.progress(lineCount, logSize) #print progress in 10% intervals
for uid in uidHits:
if logLine.count(uid) == 1: #for each UUID, check the current line of the log for a match in the UUID list
uidHits[uid] += 1 #if matched, increment the relevant value in the uidHits list
break #as we've already found the match, don't process the rest
lineCount += 1
यह काम करता है जैसा कि यह करना चाहिए - लेकिन मुझे यकीन है कि फ़ाइल को संसाधित करने का एक और अधिक प्रभावी तरीका है। मैं कुछ गाइडों के माध्यम से रहा हूं और पाया है कि 'गणना' का उपयोग एक संकलित रेगेक्स का उपयोग करने से तेज है। मैंने सोचा कि रेखा से लाइन के बजाए हिस्सों में फ़ाइलों को पढ़ने से डिस्क I/O समय की मात्रा को कम करके प्रदर्शन में सुधार होगा, लेकिन परीक्षण फ़ाइल ~ 200 एमबी पर प्रदर्शन अंतर नगण्य था। अगर किसी के पास कोई अन्य तरीका है तो मैं बहुत आभारी रहूंगा :)
फ़ाइल I/O आमतौर पर आपके द्वारा पढ़े गए हिस्सों के आकार के बावजूद बफर किया जाता है। – delnan
क्या इसे और अधिक कुशल होने की आवश्यकता है? इसमें कितना समय लगता है? आपको इसे कब तक लेने की आवश्यकता है? हो सकता है कि आप पहले से ही अपने स्टोरेज (डिस्क) की प्रदर्शन सीमा को हिट कर चुके हों, इस मामले में इससे कोई फर्क नहीं पड़ता कि आपकी पाइथन लिपि कितनी तेज है। –
यह अब एक परीक्षण फ़ाइल के माध्यम से चल रहा है - यह 10 जीबी फ़ाइल के माध्यम से आधे रास्ते है और इसे लगभग 30 मिनट लिया जाता है। मेरा पहला पायथन आउट होने के नाते मुझे वास्तव में पता नहीं है कि यह तेज़ या धीमा है या नहीं। X मिनट में इसे पूरा करने के लिए कोई आवश्यकता नहीं है, लेकिन तेज़ बेहतर है;) – SG84