About: Using React and Node.js to create reliable tools for others.
Location:
Tel Aviv, Israel
Joined:
Apr 11, 2018
Append a file into a zip file in Python
Publish Date: Dec 10 '21
5 1
I was trying to find a way to append a file into a zip file in python, but I could not find an easy way to do it.
When using zipfile built into python, using the 'a' append method doesn't overwrite files the way I expected it to. So this python module will overwrite the existing file when appending a file (which to me is the obvious solution).
There's no lack of StackOverflow posts and answers, but all of those were too specific to the specific post/issue.
So I decided to scratch my own itch, and make a library to handle it for myself and others.
append a file into an existing zip file, overwriting the existing file of the same name if needed
append-zip
Appends a file to a zip file, overwriting the existing file there if necessary
Performance
Not efficient; extracts all the files in the zip, copies over the new file, and compresses a brand new zip replacing the original one. You will need enough disk space to duplicate the zip file.
Caveats
for some reason, windows has a different file length after unzipping (by 10-20 bytes). So beware how this works on windows
Getting started
install (on Mac)
$ python3 -m pip install appendzip
fromappendzip.appendzipimportappendzip# before appendzip calendar.txt in the zip archive test.zip contains 2021-01-02# before appendzip calendar.txt outside the zip contains 2022-02-03appendzip(
pathlib.Path('test.zip'),
pathlib.Path('calendar.txt'),
'calendar.txt'
)
# after appendzip calendar.txt inside the zip contains 2022-02-03# after, there is still only one file in the zip archive test.zip
install (on Mac) $ python3 -m pip install appendzip
fromappendzip.appendzipimportappendzip# before appendzip calendar.txt in the zip archive test.zip contains 2021-01-02
# before appendzip calendar.txt outside the zip contains 2022-02-03
appendzip(pathlib.Path('test.zip'),pathlib.Path('calendar.txt'),'calendar.txt')# after appendzip calendar.txt inside the zip contains 2022-02-03
# after, there is still only one file in the zip archive test.zip
by the way, I want to fix the import, but I'm having a hard time figuring out setup.cfg