listfamilies.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import sys, os, os.path, re, xml.dom.minidom, xml.dom, optparse
  2. def usage():
  3. print """
  4. usage:
  5. listfamilies.py -d [fzp folder] {-p [prefix] }
  6. lists families and optionally provides a prefix
  7. """
  8. def main():
  9. parser = optparse.OptionParser()
  10. parser.add_option('-d', '--directory', dest="dir" )
  11. parser.add_option('-p', '--prefix', dest="prefix" )
  12. (options, args) = parser.parse_args()
  13. if not options.dir:
  14. usage()
  15. parser.error("dir argument not given")
  16. return
  17. names = []
  18. for root, dirs, files in os.walk(options.dir, topdown=False):
  19. for filename in files:
  20. if not filename.endswith(".fzp"):
  21. continue
  22. fzpFilename = os.path.join(root, filename)
  23. try:
  24. dom = xml.dom.minidom.parse(fzpFilename)
  25. except xml.parsers.expat.ExpatError, err:
  26. print str(err), fzpFilename
  27. continue
  28. fzp = dom.documentElement
  29. properties = fzp.getElementsByTagName("property")
  30. for property in properties:
  31. if property.getAttribute("name") == 'family':
  32. value = getText(property.childNodes)
  33. if not value in names:
  34. names.append(value)
  35. if options.prefix != None:
  36. for node in property.childNodes:
  37. if node.nodeType == node.TEXT_NODE:
  38. if not (options.prefix.lower() in node.data.lower()):
  39. node.data = options.prefix + " " + node.data
  40. outfile = open(fzpFilename, 'wb')
  41. s = dom.toxml("UTF-8")
  42. outfile.write(s)
  43. outfile.close()
  44. break
  45. break
  46. names.sort()
  47. for name in names:
  48. print name
  49. def getText(nodelist):
  50. rc = []
  51. for node in nodelist:
  52. if node.nodeType == node.TEXT_NODE:
  53. rc.append(node.data)
  54. return ''.join(rc)
  55. if __name__ == "__main__":
  56. main()