Etrafımda birkaç Python senaryosu var ve onları yeniden yazmaya çalışıyorum. Hepsinde de aynı problem var.
Programların nasıl yazıldığını ve böylece unix araçları gibi davranmalarını açıklamıyor.
Çünkü bu
$ cat characters | progname
ve bu
$ progname characters
aynı çıktıyı üretmelidir.
Python'da bulabileceğim en yakın şey fileinput kütüphanesiydi. Ne yazık ki, hepsi bu gibi görünen Python scriptlerimi nasıl yeniden yazacağımı gerçekten göremiyorum:
#!/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
Fileinput kütüphanesi bir stdin varsa stdin'i işler ve eğer bir dosya varsa bir dosyayı işler. Ancak, tek satırlar üzerinden yinelenir.
import fileinput
for line in fileinput.input():
process(line)
Gerçekten anlamadım. Küçük dosyalarla uğraşıyorsanız veya dosyalara çok fazla şey yapmıyorsanız, bu açık görünebilir. Ancak, amaçlarıma göre bu, dosyayı tümüyle açmak ve yukarıdaki gibi bir dizgede okumaktan çok daha yavaş hale getiriyor.
Şu anda yukarıdaki betiği çalıştırıyorum
$ pythonscript textfilename1 > textfilename2
Ama onu (ve onun kardeşlerini) borularda çalıştırabilmek istiyorum.
$ grep pattern textfile1 | pythonscript | pythonscript | pythonscript > textfile2