ZIP is the archive format every operating system opens without help. 7Z is the 7-Zip archive, which compresses hardest. Python sits between the two, and this page says exactly what happens to a ZIP file on the way to becoming a 7Z one.
What runs when a ZIP file becomes 7Z
Python and its standard library, on a machine we rent and watch. Your ZIP file is uploaded once, Python runs once, the 7Z comes back, and neither file is kept. ZIP to 7Z is one of the 3649 pairs that engine was probed on with a real file, which is why it has a page here and why the pairs the probe could not prove do not.
What survives from the ZIP into the 7Z
Every file, byte for byte, with the path it had. This pair reads each member out of the ZIP and writes it into the 7Z unchanged: nothing is recompressed twice, re-encoded or renamed. The engine counts the members on the way out and refuses the result if the count moved.
Directory structure. A file that lived in reports/2024/ arrives in reports/2024/, which is what makes the 7Z openable rather than a heap.
Size, and it is the reason to do it. A 7Z compresses the whole bundle at once instead of file by file, so a folder of similar files loses far more weight than the same folder zipped.
What ZIP to 7Z costs you
Symbolic links, hard links and special files. They are dropped rather than copied, and the response says how many: a link means something only relative to the machine that wrote it, and carrying one into an archive bound for another machine is how you build a trap. If your ZIP holds links, the 7Z will hold the files and not the links.
Unix permissions and ownership. The 7Z is written with a fixed mode and a zero timestamp, deliberately: the same input then always produces the same bytes, and the rights of a machine you do not control mean nothing on yours.
Time, and it is worth knowing before you start. Measured on this engine with 200 MB of content: 6 seconds to gzip, 43 to bzip2, 59 to LZMA, against 3,3 for no compression at all. The gain in size is real and so is the wait.
Random access. A 7Z compresses the whole bundle as one stream, so nothing inside can be read without decompressing what comes before it. A ZIP that let you pull one file out no longer will.
Where ZIP and 7Z files come from
ZIP. Phil Katz published it in 1989 and it never went away. Its one decisive property is that each file inside is compressed separately, which is why a ZIP opens instantly and why it compresses worse than the others: nothing is shared between two files that look alike.
7Z. Igor Pavlov wrote it in 1999 for 7-Zip. It compresses the whole archive with LZMA and usually wins on size, at a cost measured here: 59 seconds for 200 MB against 6 for gzip. Windows does not open it without an application, which is the reason most people convert one.
If a model is going to read the 7Z
Structure is what survives from the ZIP file, and structure is what a model needs. ZIP in, 7Z out, with the heading tree intact instead of flattened into one long paragraph.
ZIP to 7Z, measured rather than promised
Running ZIP to 7Z against the real engine with a real file, Python wrote 267 bytes of 7Z in under a tenth of a second, machine otherwise idle. That is one ZIP file on one day and not an average, which is why the number is given together with the file that produced it.
The ZIP to 7Z verdict was reached by reading the archive members back and finding a witness word, meaning the output was read back and recognised. Which check was used matters, because they do not all prove the same thing, and a status code of 200 proves nothing whatsoever about whether the 7Z file has anything inside it.
What we will not pretend about ZIP to 7Z
A ZIP file over 100 MB is refused before the upload finishes rather than after it, so you do not wait for a rejection.
A ZIP to 7Z run that passes 110 seconds is killed, and the Python process is killed with it. A run left behind would sit on one of the machine's two cores until somebody noticed.
An archive is the only kind of file whose contents decide how much room they will need once opened, and two kilobytes can hold ten gigabytes of zeros. This is a decompression bomb, it is thirty years old and it still works. Three limits answer it here, and they COUNT rather than trust the header, which can lie: 100 MB uploaded, 250 MB once decompressed, 5000 entries. A ZIP past any of them is refused, and the refusal names which one.
Nothing is written to disk on our side, not even temporarily. An archive is also the only kind of file whose contents decide FILE NAMES, and an entry called ../../etc/passwd is an attack as old as the format. Members pass from ZIP to 7Z in memory, so there is no destination directory to escape from. The names are cleaned anyway before they enter the 7Z: that part protects whoever opens it, not us.
One ZIP file at a time, chosen in the browser. There is nothing else to set up and nothing else on offer.
ZIP to 7Z: what people ask
What actually converts my ZIP file to 7Z?
Python does it, and its standard library, on a machine we rent and watch. Not a browser trick and not somebody else service: the ZIP file is uploaded once, Python runs once, the 7Z comes back, and neither file is kept afterwards.
How long does ZIP to 7Z take?
On the file the probe used, Python took under a tenth of a second and wrote 267 bytes of 7Z. That is one real measurement on one real ZIP file, not an average and not a promise about yours: a larger ZIP takes longer, and past 110 seconds the run is stopped.
What do I lose going from ZIP to 7Z?
The one to know about first: Symbolic links, hard links and special files. They are dropped rather than copied, and the response says how many: a link means something only relative to the machine that wrote it, and carrying one into an archive bound for another machine is how you build a trap. If your ZIP holds links, the 7Z will hold the files and not the links.
Are my files changed in any way?
No. Each one is read out of the ZIP and written into the 7Z byte for byte, with the path it had. What changes is the box around them. The engine counts the members on the way out and refuses the result if the count moved, which is the one way this could go wrong quietly.
How long will this take?
Longer than you expect, and the numbers are measured on this engine with 200 MB of content: 6 seconds to gzip, 43 to bzip2, 59 to LZMA. A small archive is instant. A large one is not, and the wait buys real space.
What happens to symbolic links?
They are dropped, and the response says how many. A link means something only relative to the machine that wrote it; carrying one into an archive bound for another machine is how you build a trap. The files stay, the links do not.
Is there a size limit?
Three, and they are stricter than for other formats for a reason: an archive decides how much room it needs once opened, and two kilobytes can hold ten gigabytes. 100 MB uploaded, 250 MB once decompressed, 5000 entries. Past any of them the answer says which one, rather than a generic refusal.
Is ZIP to 7Z free?
There is a free allowance every month, and one ZIP to 7Z conversion costs half a credit against it. When the allowance runs out the tool says so and stops, rather than quietly handing you a worse 7Z.