मैं एक 30MB .txt फ़ाइल है पढ़ना, डेटा की एक लाइन (30 लाख अंकों की संख्या)
दुर्भाग्य से, हर विधि मैं कोशिश की है (mmap.read()
, readline()
साथ, लूप के लिए 1 जीबी रैम आवंटित) फ़ाइल को पूरी तरह से पढ़ने के लिए 45+ मिनट लगते हैं। इंटरनेट पर मिली हर विधि इस तथ्य पर काम करती है कि प्रत्येक पंक्ति छोटी है, इसलिए स्मृति खपत फ़ाइल में सबसे बड़ी रेखा जितनी बड़ी है। यहां वह कोड है जिसका मैं उपयोग कर रहा हूं।बहुत बड़ा एक लाइनर पाठ फ़ाइल
start = time.clock()
z = open('Number.txt','r+')
m = mmap.mmap(z.fileno(), 0)
global a
a = int(m.read())
z.close()
end = time.clock()
secs = (end - start)
print("Number read in","%s" % (secs),"seconds.", file=f)
print("Number read in","%s" % (secs),"seconds.")
f.flush()
del end,start,secs,z,m
संख्या को एक पंक्ति से विभिन्न पंक्तियों में विभाजित करने के अलावा; जो मैं नहीं करना चाहता, क्या वहां एक क्लीनर विधि है जिसके लिए एक घंटे के बेहतर हिस्से की आवश्यकता नहीं होगी?
वैसे, मुझे जरूरी नहीं कि टेक्स्ट फ़ाइलों का उपयोग करना पड़े।
मेरे पास है: विंडोज 8.1 64-बिट, 16GB राम, पायथन 3.5.1
एक 30 एमबी फ़ाइल पढ़ना त्वरित है। यह 'int (filecontent)' है जो धीमा है। –
क्या आप जानते हैं कि इसे परिवर्तित करने से आपके द्वारा चुने गए प्रकार के आधार पर कम या ज्यादा अनुमान होगा? आप इसके सभी गजलियन अंक नहीं रखेंगे। – Roberto
... मेरा मतलब है, निश्चित रूप से आप उस नंबर पर काम करने में सक्षम हो सकते हैं, लेकिन मानक प्रकारों में एक संख्या में 30 मिलियन महत्वपूर्ण अंक नहीं होंगे। वे अनुमान लगाएंगे। आपको या तो ऐसा करने का एक तरीका खोजना होगा, या कार्यान्वित करना होगा। – Roberto