İşte bir dizinden globbed bir dosya seti açmak, gerekirse onları silahla açmak ve satır satır okumak için bir python betiği. Sadece dosya adlarını ve geçerli satırı ve biraz ek yükü tutmak için bellekte gerekli alanı kullanır.
#!/usr/bin/env python
import gzip, bz2
import os
import fnmatch
def gen_find(filepat,top):
for path, dirlist, filelist in os.walk(top):
for name in fnmatch.filter(filelist,filepat):
yield os.path.join(path,name)
def gen_open(filenames):
for name in filenames:
if name.endswith(".gz"):
yield gzip.open(name)
elif name.endswith(".bz2"):
yield bz2.BZ2File(name)
else:
yield open(name)
def gen_cat(sources):
for s in sources:
for item in s:
yield item
def main(regex, searchDir):
fileNames = gen_find(regex,searchDir)
fileHandles = gen_open(fileNames)
fileLines = gen_cat(fileHandles)
for line in fileLines:
print line
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Search globbed files line by line', version='%(prog)s 1.0')
parser.add_argument('regex', type=str, default='*', help='Regular expression')
parser.add_argument('searchDir', , type=str, default='.', help='list of input files')
args = parser.parse_args()
main(args.regex, args.searchDir)
Baskı satırı komutu her satırı std çıkışına gönderir, böylece bir dosyaya yeniden yönlendirebilirsiniz. Alternatif olarak, satırlarla ne yapmak istediğinizi bize bildirirseniz, bunu python komut dosyasına ekleyebilirim ve dosyanın parçalarını bırakmaya gerek kalmaz.