पूंछ के समान फ़ाइल की अंतिम n पंक्तियाँ प्राप्त करें

| | | | | | | | | | |

मैं एक वेब एप्लिकेशन के लिए एक लॉग फ़ाइल व्यूअर लिख रहा हूं और इसके लिए मैं लॉग फ़ाइल की पंक्तियों के माध्यम से पेजिनेट करना चाहता हूं। फ़ाइल में आइटम सबसे नीचे नवीनतम आइटम के साथ लाइन आधारित हैं।

इसलिए मुझे एक tail() विधि चाहिए जो नीचे से n लाइनों को पढ़ सके और ऑफसेट का समर्थन कर सके। यह वह टोपी है जिसके साथ मैं आया था:

def tail(f, n,offset=0): """ऑफ़सेट लाइनों के ऑफ़सेट के साथ f से एक लाइन पढ़ता है।""" avg_line_length = 74 to_read = n + ऑफ़सेट जबकि 1: कोशिश करें: f.seek(-(avg_line_length * to_read), 2) IOError को छोड़कर: # woops। जाहिरा तौर पर फ़ाइल जो हम चाहते हैं उससे छोटी है # पीछे हटने के लिए, इसके बजाय शुरुआत में जाएं f.seek(0) pos = f.tell() लाइन्स = f.read().splitlines() अगर len(lines) >= to_read या pos == 0: रिटर्न लाइन्स[-to_read:offset and -offset or none] avg_line_length *= 1.3 

क्या यह एक उचित तरीका है? ऑफसेट के साथ लॉग फाइलों को टेल करने का अनुशंसित तरीका क्या है?