organize.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import os
  2. import shutil
  3. from datetime import datetime
  4. import time
  5. import re
  6. try:
  7. import pil
  8. import logger
  9. except ImportError:
  10. from . import pil
  11. from . import logger
  12. def organize_files():
  13. try:
  14. files = [f for f in os.listdir(pil.dl_path) if os.path.isfile(os.path.join(pil.dl_path, f))]
  15. not_moved = 0
  16. has_moved = 0
  17. username_regex = r'(?<=\d{8}_)(.*?)(?=_\d)'
  18. date_regex = r'^\d{8}'
  19. timestamp_regex = r'_(\d{10})_'
  20. type_regex = r'(live|replay)'
  21. raw_file_dict = {}
  22. new_file_dict = {}
  23. for file in files:
  24. username = re.search(username_regex, file)[0]
  25. date_ts = datetime.strptime(re.search(date_regex, file)[0], '%Y%m%d').strftime('%d-%m-%Y')
  26. time_ts = time.strftime('%I-%M-%S-%p', time.localtime(int(re.search(timestamp_regex, file)[1])))
  27. file_ext = os.path.splitext(file)[1]
  28. file_type = re.search(type_regex, file)[0]
  29. new_file = "{:s} {:s} {:s} ({:s}){:s}".format(date_ts, time_ts, username, file_type, file_ext)
  30. raw_file_dict[file] = username
  31. new_file_dict[file] = new_file
  32. for filename, username in raw_file_dict.items():
  33. try:
  34. os.makedirs(os.path.join(pil.dl_path, username))
  35. except:
  36. pass
  37. source_path = os.path.join(pil.dl_path, filename)
  38. destination_path = os.path.join(pil.dl_path, username, new_file_dict.get(filename))
  39. if not os.path.isfile(destination_path):
  40. try:
  41. shutil.move(source_path, destination_path)
  42. logger.info("Moved and renamed '{:s}' successfully.".format(filename))
  43. has_moved += 1
  44. except OSError as oe:
  45. logger.warn("Could not move and rename {:s}: {:s}".format(filename, str(oe)))
  46. not_moved += 1
  47. else:
  48. logger.binfo("Did not move and rename '{:s}' because it already exists.".format(filename))
  49. not_moved += 1
  50. logger.separator()
  51. logger.info("{} {} moved.".format(has_moved, "file was" if has_moved == 1 else "files were"))
  52. if not_moved:
  53. logger.binfo("{} {} not moved.".format(not_moved, "file was" if not_moved == 1 else "files were"))
  54. logger.separator()
  55. except Exception as e:
  56. logger.error("Could not organize files: {:s}".format(str(e)))