parse.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import re
  2. import sqlite3
  3. import time
  4. ONE_GB = 2**30
  5. ONE_MB = 2**20
  6. ONE_KB = 2**10
  7. r = re.compile(r'^!(?P<bot>[a-z0-9-]+?) (?P<book>.+)\s(::INFO::|-+)\s+(?P<size>[0-9.]+\s*[BKMG]+)\s*$', re.I)
  8. # tags_re = re.compile(r'[\[\(](?P<tag>.*?)[\]\)]')
  9. def lines_to_dicts(lines):
  10. books = []
  11. for line in lines:
  12. line = line.strip()
  13. match = r.match(line)
  14. if match is None:
  15. continue
  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 = int(float(size.replace('gb', '')) * ONE_GB)
  21. elif 'mb' in size:
  22. size = int(float(size.replace('mb', '')) * ONE_MB)
  23. elif 'kb' in size:
  24. size = int(float(size.replace('kb', '')) * ONE_KB)
  25. elif 'b' in size:
  26. size = int(float(size.replace('b', '')))
  27. books.append((bot, book, size))
  28. return books
  29. def insert_books(books):
  30. db = sqlite3.connect('books.db')
  31. c = db.cursor()
  32. entries = []
  33. c.executemany('INSERT OR IGNORE INTO books(bot, book, size) values (?,?,?)',
  34. books)
  35. db.commit()
  36. db.close()