সম্পূর্ণ ভিন্ন স্ক্রিপ্টে কাজ করার সময়, আমি শিখেছি যে 29 মিলিয়ন লাইনের পাঠ্য সহ, seek()
উপাত্ত দিয়ে ডেটা ব্যবহার এবং পরিচালনা করা প্রায়শই লাইন বাই লাইনের ভিত্তিতে দ্রুত হয়। একই ধারণাটি নীচের স্ক্রিপ্টে প্রয়োগ করা হয়: আমরা ফাইলটি খুলি এবং ফাইলটি খোলার এবং বন্ধ করার মাধ্যমে লুপিংয়ের পরিবর্তে (যা ওভারহেড যুক্ত করতে পারে, যদিও তা উল্লেখযোগ্য না হলেও) আমরা ফাইলটি খোলা রাখি এবং আবার শুরুতে চেষ্টা করি।
#!/usr/bin/env python3
from __future__ import print_function
import sys,os
def error_out(string):
sys.stderr.write(string+"\n")
sys.exit(1)
def read_bytewise(fp):
data = fp.read(1024)
print(data.decode(),end="",flush=True)
while data:
data = fp.read(1024)
print(data.decode(),end="",flush=True)
#fp.seek(0,1)
def main():
howmany = int(sys.argv[1]) + 1
if not os.path.isfile(sys.argv[2]):
error_out("Needs a valid file")
fp = open(sys.argv[2],'rb')
for i in range(1,howmany):
#print(i)
fp.seek(0)
read_bytewise(fp)
fp.close()
if __name__ == '__main__': main()
স্ক্রিপ্ট নিজেই ব্যবহারে বেশ সহজ:
./repeat_text.py <INT> <TEXT.txt>
3 লাইনের পাঠ্য ফাইল এবং 1000 পুনরাবৃত্তির জন্য এটি প্রায় 0.1 সেকেন্ডে বেশ ঠিক হয়ে যায়:
$ /usr/bin/time ./repeat_text.py 1000 input.txt > /dev/null
0.10user 0.00system 0:00.23elapsed 45%CPU (0avgtext+0avgdata 9172maxresident)k
0inputs+0outputs (0major+1033minor)pagefaults 0swaps
স্ক্রিপ্টটি নিজেই সবচেয়ে মার্জিত নয়, সম্ভবত ছোট করা যেতে পারে, তবে কাজটি করে। অবশ্যই, আমি এখানে এবং সেখানে কয়েকটি অতিরিক্ত বিট যুক্ত করেছি, যেমন error_out()
ফাংশন, যা প্রয়োজনীয় নয় - এটি কেবল একটি ছোট ব্যবহারকারী-বান্ধব স্পর্শ।