यह लिंक (How to get line count cheaply in Python?) संभावित समाधानों में से बहुत से, लेकिन वे सभी काफी तेज इस रन बनाने के लिए, अर्थात्, unbuffered (कच्चे) इंटरफ़ेस का उपयोग कर bytearrays का उपयोग करके एक तरह से उपेक्षा, और अपना खुद का बफरिंग करना
समय उपकरण का एक संशोधित संस्करण का उपयोग करना, मैं निम्नलिखित कोड विश्वास तेजी से (और मामूली रूप से अधिक pythonic) की पेशकश की समाधान की तुलना में है:
rawpycount 0.0048 0.0046 1.00
bufcount 0.0074 0.0066 1.43
wccount 0.01 0.01 2.17
itercount 0.014 0.014 3.04
opcount 0.021 0.02 4.43
kylecount 0.023 0.021 4.58
simplecount 0.022 0.022 4.81
mapcount 0.038 0.032 6.82
:
def _make_gen(reader):
b = reader(1024 * 1024)
while b:
yield b
b = reader(1024*1024)
def rawpycount(filename):
f = open(filename, 'rb')
f_gen = _make_gen(f.raw.read)
return sum(buf.count(b'\n') for buf in f_gen)
यहाँ मेरी समय कर रहे हैं
मैं इसे वहां पोस्ट करूंगा, लेकिन मैं एक्सचेंज ढेर करने के लिए अपेक्षाकृत नया उपयोगकर्ता हूं और आवश्यक मन्ना नहीं है।
संपादित करें:
यह itertools का उपयोग कर इन-लाइन जनरेटर भाव के साथ पूरी तरह से किया जा सकता है, लेकिन यह बहुत अजीब लग रही हो जाता है:
स्रोत
2014-12-17 03:05:34
खुला ('data.txt') fp के रूप में: fp में लाइन के लिए: अगर line.strip(): गिनती + = 1 –
@alecxe यह काम करेंगे।? –
हाँ, यह काम करेंगे, लेकिन समाधान pythonic, बेहतर इस्तेमाल 'राशि()' नहीं है। – alecxe