Advertisement
Guest User

Untitled

a guest
Aug 21st, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.69 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import os
  5.  
  6. class traverse_file:
  7.     """ traverse files """
  8.     def __init__(self, base='.', ext=['.xls', '.xlsx']):
  9.         self.base = base  # base dir
  10.         self.ext = ext    # match file exten
  11.         self.cdir = None  # curent dir
  12.         self.citer = None # current iter
  13.         self.name = None
  14.  
  15.     def __str__(self):
  16.         return os.path.join(self.name[0], self.name[1])
  17.  
  18.     def __iter__(self):
  19.         self.cdir = [os.listdir(self.base)]
  20.         self.citer = [iter(self.cdir[-1])]
  21.         self.name = [self.base, '']
  22.         return self
  23.  
  24.     def __next__(self):
  25.         try:
  26.             while True:
  27.                 f = next(self.citer[-1])
  28.                 self.name[-1] = f;
  29.                 fn = os.path.join(self.name[0], self.name[1])
  30.                 if os.path.isfile(fn):
  31.                     if os.path.splitext(f)[-1] in self.ext:
  32.                         return self
  33.                     else:
  34.                         return next(self)
  35.                 if os.path.isdir(fn):
  36.                     if len(os.listdir(fn)) == 0:
  37.                         raise StopIteration
  38.                     self.cdir.append(os.listdir(fn))
  39.                     self.citer.append(iter(self.cdir[-1]))
  40.                     self.name[0] = fn
  41.                     return next(self)
  42.         except StopIteration:
  43.             if len(self.cdir) == 1:
  44.                 raise StopIteration
  45.             self.cdir.pop()
  46.             self.citer.pop()
  47.             self.name[0] = os.path.split(self.name[0])[0]
  48.             return next(self)
  49.  
  50. if __name__ == '__main__':
  51.     for n, f in enumerate(traverse_file(), 1):
  52.         print('{}: {}'.format(n, f))
  53.  
  54.  
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement