Guest User

Untitled

a guest
Oct 20th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. import re, sys
  2. from itertools import chain
  3.  
  4. r = re.compile('<tr.*?>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(\w+)\s*</td>\s*<td>(\w+)\s*</td>')
  5. def parse_names(filename):
  6. with open(filename, 'r+') as f:
  7. return r.findall(f.read())
  8.  
  9. """
  10. Вход: nameYYYY.html
  11. Выход: список начинается с года, продолжается имя-ранг в алфавитном порядке.
  12. '2006', 'Aaliyah 91', Aaron 57', 'Abagail 895', ' и т.д.
  13. """
  14. def extr_name(filename):
  15. fmt = lambda r,n: '{} {}'.format(r,n)
  16. try:
  17. data = parse_names(filename)
  18. except IOError:
  19. print('File "{}" not found'.format(arg), file=sys.stderr)
  20. return [filename[4:8]] \
  21. + sorted(
  22. chain(
  23. *map(
  24. lambda x: (fmt(x[0],x[1]), fmt(x[0],x[2])),
  25. data)
  26. ), key=lambda x: x[x.find(' ')+1:])
  27.  
  28. # для каждого переданного аргументом имени файла, вывести имена extr_name
  29. # напечатать ТОП-10 муж и жен имен из всех переданных файлов
  30. def print_top10_table(filename):
  31. try:
  32. data = [('Rank', 'Male Name', 'Female Name')] + parse_names(filename)[:10]
  33. except IOError:
  34. print('File "{}" not found'.format(filename), file=sys.stderr)
  35. colwidth = list(map(lambda x: max(map(len,x)), list(zip(*data))))
  36. print('Filename: {}'.format(filename))
  37. list(map(
  38. lambda x: print('{0[0]:>{1[0]}} {0[1]:>{1[1]}} {0[2]:>{1[2]}}'.format(x, colwidth)),
  39. data))
  40.  
  41. def main():
  42. args = sys.argv[1:]
  43. if not args:
  44. print('use: [--file] file [file ...]')
  45. sys.exit(1)
  46. i = 0
  47. while True:
  48. if args[i] == '--file':
  49. i+=1
  50. arg = args[i]
  51. i+=1
  52. print_top10_table(arg)
  53. print(extr_name(arg)[:11])
  54. if i >= len(args):
  55. break
  56.  
  57. if __name__ == '__main__':
  58. main()
Add Comment
Please, Sign In to add comment