Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re, sys
- from itertools import chain
- r = re.compile('<tr.*?>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(\w+)\s*</td>\s*<td>(\w+)\s*</td>')
- def parse_names(filename):
- with open(filename, 'r+') as f:
- return r.findall(f.read())
- """
- Вход: nameYYYY.html
- Выход: список начинается с года, продолжается имя-ранг в алфавитном порядке.
- '2006', 'Aaliyah 91', Aaron 57', 'Abagail 895', ' и т.д.
- """
- def extr_name(filename):
- fmt = lambda r,n: '{} {}'.format(r,n)
- try:
- data = parse_names(filename)
- except IOError:
- print('File "{}" not found'.format(arg), file=sys.stderr)
- return [filename[4:8]] \
- + sorted(
- chain(
- *map(
- lambda x: (fmt(x[0],x[1]), fmt(x[0],x[2])),
- data)
- ), key=lambda x: x[x.find(' ')+1:])
- # для каждого переданного аргументом имени файла, вывести имена extr_name
- # напечатать ТОП-10 муж и жен имен из всех переданных файлов
- def print_top10_table(filename):
- try:
- data = [('Rank', 'Male Name', 'Female Name')] + parse_names(filename)[:10]
- except IOError:
- print('File "{}" not found'.format(filename), file=sys.stderr)
- colwidth = list(map(lambda x: max(map(len,x)), list(zip(*data))))
- print('Filename: {}'.format(filename))
- list(map(
- lambda x: print('{0[0]:>{1[0]}} {0[1]:>{1[1]}} {0[2]:>{1[2]}}'.format(x, colwidth)),
- data))
- def main():
- args = sys.argv[1:]
- if not args:
- print('use: [--file] file [file ...]')
- sys.exit(1)
- i = 0
- while True:
- if args[i] == '--file':
- i+=1
- arg = args[i]
- i+=1
- print_top10_table(arg)
- print(extr_name(arg)[:11])
- if i >= len(args):
- break
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment