parse.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import time
  2. import re
  3. from collections import namedtuple
  4. import pg_simple
  5. ONE_GB = 2**30
  6. ONE_MB = 2**20
  7. ONE_KB = 2**10
  8. connection_pool = pg_simple.config_pool(dsn='dbname=david user=david')
  9. r = re.compile(r'^!(?P<bot>[a-z0-9-]+?) (?P<book>.+)\s(::INFO::|-+)\s+(?P<size>[0-9.]+\s*[BKMG]+)\s*$', re.I)
  10. tags_re = re.compile(r'[\[\(](?P<tag>.*?)[\]\)]')
  11. books = []
  12. Book = namedtuple('Book', 'raw bot book size')
  13. for line in open('all_books_2.txt', 'r'):
  14. line = line.strip()
  15. match = r.match(line)
  16. bot = match.group('bot').strip()
  17. book = match.group('book').strip()
  18. size = match.group('size').strip().lower()
  19. if 'gb' in size:
  20. size = float(size.replace('gb', '')) * ONE_GB
  21. elif 'mb' in size:
  22. size = float(size.replace('mb', '')) * ONE_MB
  23. elif 'kb' in size:
  24. size = float(size.replace('kb', '')) * ONE_KB
  25. elif 'b' in size:
  26. size = float(size.replace('b', ''))
  27. books.append(Book(line, bot, book, size)._asdict())
  28. print('db..')
  29. with pg_simple.PgSimple(connection_pool) as db:
  30. t = time.time()
  31. vals = [tuple(book.values()) for book in books]
  32. print('making tuples', time.time() - t)
  33. db.insert_many('books', keys=books[0].keys(), values=vals, page_size=1000)
  34. print('commiting..')
  35. db.commit()
  36. print('done..')