আমার কয়েকটি পাইথনের স্ক্রিপ্ট রয়েছে যার চারপাশে রয়েছে এবং আমি সেগুলি পুনর্লিখনের কাজ করছি। আমার সবার সাথে একই সমস্যা আছে।
প্রোগ্রামগুলি কীভাবে লিখবেন তা আমার কাছে স্পষ্ট নয় যাতে তারা যথাযথ ইউনিক্স সরঞ্জামগুলির মতো আচরণ করে।
কারণ এই
$ cat characters | progname
এবং এই
$ progname characters
একই আউটপুট উত্পাদন করা উচিত।
পাইথনে আমি যে নিকটতম জিনিসটি দেখতে পেতাম তা হ'ল ফাইল ইনপুট লাইব্রেরি। দুর্ভাগ্যক্রমে, আমি আমার পাইথন স্ক্রিপ্টগুলি কীভাবে পুনরায় লেখতে পারি তা সত্যই দেখতে পাচ্ছি না, সবগুলিই এর মতো দেখাচ্ছে:
#!/usr/bin/env python
# coding=UTF-8
import sys, re
for file in sys.argv[1:]:
f = open(file)
fs = f.read()
regexnl = re.compile('[^\s\w.,?!:;-]')
rstuff = regexnl.sub('', fs)
f.close()
print rstuff
স্টিডিন থাকলে ফাইলিনপুট লাইব্রেরি স্টিডিন প্রক্রিয়াজাত করে এবং একটি ফাইল থাকলে কোনও ফাইল প্রসেস করে। তবে এটি একক লাইনে পুনরাবৃত্তি করে।
import fileinput
for line in fileinput.input():
process(line)
আমি সত্যিই তা পাই না। আমার ধারণা আপনি যদি ছোট ফাইলগুলি নিয়ে কাজ করছেন বা আপনি যদি ফাইলগুলিতে বেশি কিছু না করেন তবে এটি স্পষ্ট বলে মনে হতে পারে। তবে, আমার উদ্দেশ্যগুলির জন্য, এটি পুরো ফাইলটি খোলার এবং উপরে স্ট্রিংয়ের মধ্যে স্ট্রিংয়ে পড়ার চেয়ে অনেক ধীর করে তোলে।
বর্তমানে আমি উপরের স্ক্রিপ্টটি চালাচ্ছি
$ pythonscript textfilename1 > textfilename2
তবে আমি এটি (এবং এর ভাইয়েরা) পাইপের মতো চালাতে সক্ষম হতে চাই
$ grep pattern textfile1 | pythonscript | pythonscript | pythonscript > textfile2