मैं एक ऐसी स्क्रिप्ट पर काम कर रहा था जो फाइलों का एक फ़ोल्डर (20 एमबी से 100 एमबी तक के प्रत्येक आकार) को पढ़ता है, प्रत्येक पंक्ति में कुछ डेटा संशोधित करता है, और वापस लिखता है फ़ाइल की एक प्रति।पायथन लेखसूची() और लिखना() विशाल समय अंतर
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.writelines('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
एक 90 एमबी फ़ाइल (~ 900,000 लाइनों) के साथ इस कोड चलाने पर, यह फ़ाइल पर लिखने के लिए ले जाया समय लिया के रूप में 140 सेकंड छपी। यहां मैंने writelines()
का उपयोग किया। इसलिए मैंने फ़ाइल लेखन गति को बेहतर बनाने के विभिन्न तरीकों की खोज की, और मैंने जो लेख पढ़े, उनमें से write()
और writelines()
में कोई अंतर नहीं दिखाना चाहिए क्योंकि मैं एक एकल संयोजित स्ट्रिंग लिख रहा हूं। मैं भी समय केवल निम्नलिखित बयान के लिए ले जाया जाँच:
new_string = '\n'.join(new_my_list) + '\n'
और यह केवल 0.4 दूसरा ले लिया है, इतनी बड़ी लिया समय क्योंकि सूची बनाने का नहीं था। बस बाहर write()
कोशिश करने के लिए मैं इस कोड की कोशिश की:
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.write('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
और यह 2.5 सेकंड छपी। write()
और writelines()
के लिए फ़ाइल लेखन समय में इतना बड़ा अंतर क्यों है, भले ही यह वही डेटा हो? क्या यह सामान्य व्यवहार है या मेरे कोड में कुछ गड़बड़ है? आउटपुट फ़ाइल दोनों मामलों के लिए समान प्रतीत होती है, इसलिए मुझे पता है कि डेटा में कोई हानि नहीं है।
वोट दें। –
इसके अलावा मेरा clean_data() फ़ंक्शन प्रत्येक पंक्ति को स्ट्रिप्स करता है, इसलिए अतिरिक्त न्यूलाइन हटा दी जाती है। –