Advertisement
snowpb

PPT Copier

Sep 24th, 2020
857
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.80 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. import datetime
  4. import os
  5. import re
  6. import shutil
  7.  
  8. from pptx import Presentation  # requirements: python-pptx
  9.  
  10. FILE_PATTERN = r"ECL_Progress_Meeting_\d{8}_문준오.pptx$"
  11. NEW_FILE_FORMAT = "ECL_Progress_Meeting_{}_문준오.pptx"
  12. DURATAION_PATTERN = r"\d{4}[.]\d{2}.\d{2}-\d{4}[.]\d{2}.\d{2}"
  13.  
  14. def main():
  15.     pattern = re.compile(FILE_PATTERN)
  16.  
  17.     so_far_latest = max(os.path.join(root, file)
  18.             for root, dirs, files in os.walk(".")
  19.             for file in files if pattern.search(os.path.join(root, file))
  20.             )
  21.  
  22.     meeting_date = get_next_friday().strftime("%Y%m%d")
  23.  
  24.     new_filename = NEW_FILE_FORMAT.format(meeting_date)
  25.  
  26.     create_pptx_with_new_date(so_far_latest, new_filename)
  27.     return
  28.  
  29.  
  30. def get_next_friday(today=datetime.datetime.now()) -> datetime.datetime:
  31.     FRIDAY = 4
  32.  
  33.     weekday: int = today.weekday()
  34.  
  35.     if weekday <= FRIDAY:
  36.         friday = today + datetime.timedelta(days=FRIDAY - weekday)
  37.     else:
  38.         friday = today + datetime.timedelta(days=weekday - FRIDAY + 7)
  39.  
  40.     assert friday.weekday() == FRIDAY
  41.     return friday
  42.  
  43.  
  44. def create_pptx_with_new_date(src_name: str, dst_name: str):
  45.     pattern = re.compile(DURATAION_PATTERN)
  46.  
  47.     prs = Presentation(src_name)
  48.  
  49.     cell = next(cell
  50.             for slide in prs.slides
  51.             for shape in slide.shapes if shape.has_table
  52.             for cell in shape.table.iter_cells() if pattern.search(cell.text)
  53.             )
  54.     run = next(run
  55.             for para in cell.text_frame.paragraphs
  56.             for run in para.runs
  57.             )
  58.     run.text = replace_date()
  59.     print(f"New date: {run.text}")
  60.  
  61.     prs.save(dst_name)
  62.     return
  63.  
  64.  
  65. def replace_date(today=datetime.datetime.now()) -> str:
  66.     end_time = get_next_friday(today)
  67.     start_time = end_time - datetime.timedelta(days=4)
  68.  
  69.     return f"""{start_time.strftime("%Y.%m.%d")}-{end_time.strftime("%Y.%m.%d")}"""
  70.  
  71.  
  72. if __name__ == "__main__":
  73.     main()
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement