123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- import os
- import fnmatch
- import gzip
- import bz2
- import re
- def gen_find(filepat, top):
- """
- Find all filenames in a directory tree that match a shell wildcard pattern
- """
- for path, dirlist, filelist in os.walk(top):
- for name in fnmatch.filter(filelist, filepat):
- yield os.path.join(path,name)
- def gen_opener(filenames):
- """
- Open a sequence of filenames one at a time producing a file object.
- The file is closed immediately when proceeding to the next iteration.
- """
- for filename in filenames:
- if filename.endswith('.gz'):
- f = gzip.open(filename, 'rt')
- elif filename.endswith('.bz2'):
- f = bz2.open(filename, 'rt')
- else:
- f = open(filename, 'rt')
- yield f
- f.close()
- def gen_concatenate(iterators):
- """
- Chain a sequence of iterators together into a single sequence.
- """
- for it in iterators:
- for _ in it:
- yield _
- def gen_grep(pattern, lines):
- """
- Look for a regex pattern in a sequence of lines
- """
- pat = re.compile(pattern)
- for line in lines:
- if pat.search(line):
- yield line
|