Advertisement
mrxak

Untitled

Dec 28th, 2011
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.30 KB | None | 0 0
  1. __author__ = 'MrXaK'
  2. __version__ = '0.1b'
  3.  
  4. import os
  5. from optparse import OptionParser
  6. import string
  7. import datetime
  8. import ctypes
  9.  
  10. isTimeCheck = 1
  11. isRecursive = 1
  12. extension = 'py'
  13. workDir = os.path.dirname(__file__)
  14. parseDir = workDir
  15. outDir = os.path.dirname(__file__)
  16. outFile = outDir+'/out'
  17. excludeDir = ''
  18. year = 2011
  19.  
  20. def writeToFile(str):
  21.     if (not os.path.exists(outFile)):
  22.         file = open(outFile, 'w')
  23.         file.write(str)
  24.         file.close()
  25.         return
  26.     file = open(outFile, 'a')
  27.     file.write(str)
  28.     file.close()
  29.  
  30. def isCountable(fileName):
  31.     print fileName
  32.     if (string.split(fileName, '.')[-1] != extension):
  33.         return False
  34.     if (isTimeCheck):
  35.         t = os.path.getmtime(fileName)
  36.         t = datetime.datetime.fromtimestamp(t)
  37.         if (t.timetuple()[0] == year):
  38.             return True
  39.         else:
  40.             return False
  41.     return True
  42.  
  43. def is_hidden(filepath):
  44.     try:
  45.         name = os.path.basename(os.path.abspath(filepath))
  46.         return name.startswith('.') or has_hidden_attribute(filepath)
  47.     except:
  48.         return False
  49.  
  50. def has_hidden_attribute(filepath):
  51.     try:
  52.         attrs = ctypes.windll.kernel32.GetFileAttributesW(unicode(filepath))
  53.         assert attrs != -1
  54.         result = bool(attrs & 2)
  55.     except (AttributeError, AssertionError):
  56.         result = False
  57.     return result
  58.  
  59.  
  60. def parseDirCall(dirName):
  61.     counter = 0
  62.     writeToFile('Parsing dir %s\n' %(dirName))
  63.     for fileName in os.listdir(dirName):
  64.         if (dirName+'/'+fileName in excludeDir):
  65.             continue
  66.         if (is_hidden(dirName+'/'+fileName)):
  67.             continue
  68.         try:
  69.             if (os.path.isdir(dirName+'/'+fileName) and isRecursive):
  70.                 counter = counter + parseDirCall(dirName+'/'+fileName)
  71.             elif (isCountable(dirName+'/'+fileName)):
  72.                 counter = counter + sum(1 for l in open(dirName+'/'+fileName, 'r'))
  73.         except:
  74.             continue
  75.             pass
  76.     writeToFile('Sum: %d\n' %counter)
  77.     return counter
  78.  
  79. if '__main__' == __name__:
  80.     parser = OptionParser(version='%prog '+__version__ , usage =
  81. """Usage: %prog [options]
  82. """)
  83.     parser.add_option('-d', '--directory', default=parseDir,
  84.                       help='Directory to parse')
  85.  
  86.     parser.add_option('-e', '--extension', default=extension,
  87.                       help='Extension')
  88.     parser.add_option('-t', '--timeCheck', default=isTimeCheck,
  89.                       help='Check creation time')
  90.     parser.add_option('-r', '--recursive', default=isRecursive,
  91.                       help='Parse recursive')
  92.     parser.add_option('-o', '--outFile', default=outFile,
  93.                       help='Out file name')
  94.     parser.add_option('-x', '--excludeDir', default='',
  95.                       help='Out file name')
  96.    
  97.     (options, args) = parser.parse_args()
  98.     print options
  99.     isTimeCheck = options.timeCheck
  100.     isRecursive = options.recursive
  101.     extension = options.extension
  102.     parseDir = options.directory
  103.     excludeDir = string.split(options.excludeDir, ';')
  104.     if (-1 != string.find(options.outFile, '/')):
  105.         outFile = options.outFile
  106.     else:
  107.         outFile = outDir+'/'+options.outFile
  108.     a = parseDirCall('%s' %options.directory)
  109.     writeToFile('All sum: %d' %a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement