p = re.compile('>.*\n')
p.sub('', text)
मैं '>' से शुरू होने वाली सभी लाइनों को हटाना चाहता हूं। मेरे पास वास्तव में एक विशाल फ़ाइल (3 जीबी) है जो मैं आकार 250 एमबी के टुकड़ों में संसाधित करता हूं, इसलिए चर "टेक्स्ट" आकार 250 एमबी की एक स्ट्रिंग है। (मैंने विभिन्न आकारों की कोशिश की, लेकिन प्रदर्शन पूरी फ़ाइल के लिए हमेशा एक ही था)।पायथन गति इस regex उप
अब, क्या मैं इस रेगेक्स को किसी भी तरह से तेज कर सकता हूं? मैंने बहु-रेखा मिलान करने की कोशिश की, लेकिन यह बहुत धीमी थी। या यहां तक कि बेहतर तरीके भी हैं?
(मैंने स्ट्रिंग को विभाजित करने की कोशिश की है और फिर इस तरह की रेखा को फ़िल्टर किया है, लेकिन यह धीमा भी था (मैंने def delline के बजाय लैम्ब्डा की भी कोशिश की: (हो सकता है कि यह काम करने वाला कोड न हो, यह सिर्फ स्मृति से है) :
def del_line(x): return x[0] != '>'
def func():
....
text = file.readlines(chunksize)
text = filter(del_line, text)
...
संपादित करें: के रूप में टिप्पणी में सुझाव दिया, मैं भी लाइन चलने लाइन द्वारा की कोशिश की:
text = []
for line in file:
if line[0] != '>':
text.append(line)
text = ''.join(text)
भी धीमी है यही कारण है, यह ~ की जरूरत है 12 सेकंड मेरे regex जरूरत ~ 7 सेकंड (।। हाँ, यह तेज़ है, लेकिन इसे धीमी मशीनों पर भी चलाना चाहिए)
संपादित करें: बेशक, मैं भी str.startswith ('>'), यह धीमी थी कोशिश की ...
रेगेक्स –
का उपयोग न करें '(? एम) ^> [^ \ n] * \ n', जंगली अनुमान का प्रयास करें। यकीन नहीं है कि यह कुछ भी सुधार होगा। – HamZa
@ हम्ज़ा यह बहुत धीमा है। – Eulelie