Le 7Z est l'archive de 7-Zip, celle qui compresse le plus fort. Le ZIP est le format d'archive que tout système d'exploitation ouvre sans aide. Python se tient entre les deux, et cette page dit exactement ce qui arrive à un fichier 7Z en route vers le ZIP.
Ce qui s'exécute quand un fichier 7Z devient un ZIP
Python et sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Votre fichier 7Z est envoyé une fois, Python s'exécute une fois, le fichier ZIP revient, et aucun des deux fichiers n'est conservé. 7Z vers ZIP fait partie des 3649 paires sur lesquelles ce moteur a été sondé avec un vrai fichier, et c'est pour cela que cette page existe quand celles que la sonde n'a pas su prouver n'existent pas.
Ce qui survit du fichier 7Z dans le fichier ZIP
Chaque fichier, octet pour octet, avec le chemin qu'il avait. Cette paire lit chaque membre du 7Z et l'écrit dans le ZIP sans le changer : rien n'est recompressé deux fois, réencodé ni renommé. Le moteur compte les membres à la sortie et refuse le résultat si le compte a bougé.
L'arborescence. Un fichier qui vivait dans rapports/2024/ arrive dans rapports/2024/, et c'est ce qui rend le ZIP ouvrable plutôt qu'informe.
La possibilité de l'ouvrir d'un double clic. Windows et macOS lisent tous deux le ZIP sans rien installer, et c'est toute la raison d'être de cette paire : un 7Z demande d'ordinaire une application, un ZIP non.
L'accès direct. Chaque fichier d'un ZIP est compressé à part, si bien qu'un lecteur peut en tirer un seul sans parcourir les autres. C'est aussi pourquoi il compresse moins que les autres, et ces deux faits n'en font qu'un.
Ce que la conversion 7Z vers ZIP vous coûte
Les liens symboliques, les liens matériels et les fichiers spéciaux. Ils sont écartés plutôt que copiés, et la réponse dit combien : un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit, et en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Si votre 7Z porte des liens, le ZIP portera les fichiers et pas les liens.
Les permissions et la propriété Unix. Le ZIP est écrit avec un mode fixe et un horodatage nul, délibérément : la même entrée produit alors toujours les mêmes octets, et les droits d'une machine que vous ne contrôlez pas ne signifient rien sur la vôtre.
Le taux de compression, et souvent de beaucoup. Un ZIP compresse chaque fichier à part : il ne peut donc pas remarquer que cent fichiers se ressemblent. Sur un dossier de documents semblables, le ZIP peut peser le double du 7Z.
D'où viennent les fichiers 7Z et ZIP
7Z. Igor Pavlov l'a écrit en 1999 pour 7-Zip. Il compresse l'archive entière en LZMA et l'emporte en général sur la taille, à un coût mesuré ici : 59 secondes pour 200 Mo contre 6 pour gzip. Windows ne l'ouvre pas sans application, et c'est la raison pour laquelle la plupart des gens en convertissent un.
ZIP. Phil Katz l'a publié en 1989 et il n'est jamais reparti. Sa seule propriété décisive est que chaque fichier à l'intérieur est compressé séparément, ce qui explique qu'un ZIP s'ouvre instantanément et qu'il compresse moins bien que les autres : rien n'est partagé entre deux fichiers qui se ressemblent.
Si un modèle doit lire le fichier ZIP
La structure est ce qui subsiste du fichier 7Z, et la structure est ce dont un modèle a besoin. 7Z en entrée, ZIP en sortie, avec l'arbre des titres intact plutôt qu'aplati en un seul long paragraphe.
7Z vers ZIP, mesuré plutôt que promis
En passant 7Z vers ZIP sur le moteur réel avec un vrai fichier, Python a écrit 309 octets au format ZIP en moins d'un dixième de seconde, machine par ailleurs au repos. C'est un fichier 7Z un jour donné et non une moyenne, et c'est pourquoi le nombre est donné avec le fichier qui l'a produit.
Le verdict 7Z vers ZIP a été obtenu par la relecture des membres de l'archive et la recherche d'un mot témoin, c'est-à-dire que la sortie a été relue et reconnue. Le contrôle employé compte, parce qu'ils ne prouvent pas tous la même chose, et un code de statut 200 ne prouve strictement rien sur ce que le fichier ZIP contient.
Les autres routes vers ZIP, et ce qu'elles ont mesuré
Parmi les routes publiées vers ZIP, 7Z est la plus grosse sortie des 3 mesurées. Les fichiers témoins diffèrent : ce classement porte sur la sonde et non sur votre document.
TGZ vers ZIP : 309 octets en moins d'un dixième de seconde.
TAR vers ZIP : 309 octets en moins d'un dixième de seconde.
Ce que nous ne prétendrons pas sur 7Z vers ZIP
Un fichier 7Z de plus de 100 Mo est refusé avant la fin de l'envoi plutôt qu'après, pour que vous n'attendiez pas un refus.
Une conversion 7Z vers ZIP qui dépasse 110 secondes est tuée, et le processus Python avec elle. Une exécution abandonnée resterait posée sur l'un des deux cœurs de la machine jusqu'à ce que quelqu'un le remarque.
Une archive est le seul type de fichier dont le contenu décide de la place qu'il prendra une fois ouvert, et deux kilooctets peuvent porter dix gigaoctets de zéros. C'est une bombe de décompression, elle a trente ans et elle marche encore. Trois limites y répondent ici, et elles COMPTENT au lieu de croire l'en-tête, qui peut mentir : 100 Mo envoyés, 250 Mo une fois décompressés, 5 000 entrées. Un 7Z qui dépasse l'une d'elles est refusé, et le refus dit laquelle.
Rien n'est écrit sur disque de notre côté, pas même temporairement. Une archive est aussi le seul type de fichier dont le contenu décide des NOMS DE FICHIER, et une entrée appelée ../../etc/passwd est une attaque aussi vieille que le format. Les membres passent du 7Z au ZIP en mémoire : il n'y a donc aucun répertoire de destination dont s'échapper. Les noms sont malgré tout nettoyés avant d'entrer dans le ZIP ; cette partie-là protège celui qui l'ouvre, pas nous.
Un fichier 7Z à la fois, choisi dans le navigateur. Il n'y a rien d'autre à régler et rien d'autre à proposer.
7Z vers ZIP : les questions que l'on pose
Qu'est-ce qui convertit vraiment mon fichier 7Z en ZIP ?
C'est Python qui s'en charge, avec sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Ni astuce de navigateur, ni service d'un tiers : le fichier 7Z est envoyé une fois, Python s'exécute une fois, le ZIP revient, et aucun des deux fichiers n'est conservé ensuite.
Combien de temps prend une conversion 7Z vers ZIP ?
Sur le fichier utilisé par la sonde, Python a mis moins d'un dixième de seconde et écrit 309 octets de ZIP. C'est une mesure réelle sur un fichier 7Z réel, pas une moyenne et pas une promesse sur le vôtre : un 7Z plus gros prend plus longtemps, et au-delà de 110 secondes l'exécution est arrêtée.
Qu'est-ce que je perds en passant du 7Z au ZIP ?
Celle qu'il faut connaître en premier : les liens symboliques, les liens matériels et les fichiers spéciaux. Ils sont écartés plutôt que copiés, et la réponse dit combien : un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit, et en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Si votre 7Z porte des liens, le ZIP portera les fichiers et pas les liens.
Mes fichiers sont-ils modifiés d'une manière ou d'une autre ?
Non. Chacun est lu du 7Z et écrit dans le ZIP octet pour octet, avec le chemin qu'il avait. Ce qui change, c'est la boîte autour d'eux. Le moteur compte les membres à la sortie et refuse le résultat si le compte a bougé, ce qui est la seule façon dont cela pourrait mal tourner en silence.
Pourquoi le ZIP est-il plus gros que le 7Z ?
Parce qu'un ZIP compresse chaque fichier à part, quand un 7Z compresse l'ensemble d'un coup. Sur un dossier de fichiers semblables, cette différence est grande. Vous échangez de la taille contre le fait que n'importe qui peut ouvrir un ZIP sans rien installer.
Qu'advient-il des liens symboliques ?
Ils sont écartés, et la réponse dit combien. Un lien ne veut dire quelque chose que par rapport à la machine qui l'a écrit ; en emporter un dans une archive destinée à une autre machine, c'est fabriquer un piège. Les fichiers restent, les liens non.
Y a-t-il une limite de taille ?
Trois, et elles sont plus strictes que pour les autres formats, pour une raison : une archive décide de la place qu'il lui faut une fois ouverte, et deux kilooctets peuvent en porter dix gigaoctets. 100 Mo envoyés, 250 Mo une fois décompressés, 5 000 entrées. Au-delà de l'une d'elles, la réponse dit laquelle plutôt qu'un refus générique.
La conversion 7Z vers ZIP est-elle gratuite ?
Il y a une franchise gratuite chaque mois, et une conversion 7Z vers ZIP coûte un demi-crédit dessus. Quand la franchise est épuisée, l'outil le dit et s'arrête, plutôt que de vous remettre discrètement un ZIP moins bon.