Make a zipfile of the latest log files
Level: Intermediate (score: 3)
You added some monitoring the other day writing log files to a directory. In this Bite you will zip up the latest ones renaming the files to include the creation date. Ready to learn some pathlib, Zipfile and a bit of datetime goodness?
Complete zip_last_n_files that takes a directory (Path object), a zip_file output filename (str) and n (int) = the amount files to include in the zipfile. You zip up the last N log files to a zipfile in the current working directory. The files need to include their creation date (%Y-%m-%d, e.g. 2019-10-30).
Here is an example how it should work. Given this directory (files sorted ascending by creation timestamp):
$ ls -lrth /tmp/logs/ total 0 -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:16 file4.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:16 file3.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:16 file2.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:16 file5.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:17 file7.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 30 23:17 file6.log -rw-r--r-- 1 bobbelderbos wheel 0B Oct 31 00:10 file1.log
Your code should produce a zipfile with the last N (here = 3) files. (Note the renamed file names!)
>>> from pathlib import Path
>>> from zipfile import ZipFile
>>> from files import zip_last_n_files
>>> path = Path('/tmp') / 'logs'
>>> zip_last_n_files(path, 'log_files.zip', n=3)
>>> zip_out = Path('log_files.zip')
>>> ZipFile(zip_out).namelist()
['file1_2019-10-31.log', 'file7_2019-10-30.log', 'file6_2019-10-30.log']
The order of the 3 files does not really matter, as long as you get the latest 3 (or whatever number n is).
We hope you learn some good tricks coding this Bite. Maybe even a script / snippet you can use elsewhere! And remember keep calm and code in Python!