Comment puis-je lire et enregistrer le contenu de 7z. J'utilise Python 2.7.9, je peux extraire ou archiver comme ça, mais je ne peux pas lire le contenu en python, je liste uniquement le contenu du fichier en CMD
import subprocess
import os
source = 'filename.7z'
directory = 'C:\Directory'
pw = '123456'
subprocess.call(r'"C:\Program Files (x86)\7-Zip\7z.exe" x '+source +' -o'+directory+' -p'+pw)
Vous pouvez utiliser libarchive ou pylzma . Si vous pouvez passer à python3.3 +, vous pouvez utiliser lzma , qui se trouve dans la bibliothèque standard.
Je me suis retrouvé dans cette situation où j'ai été forcé d'utiliser 7z, et j'avais également besoin de savoir exactement quels fichiers étaient extraits de chaque archive Zip. Pour y faire face, vous pouvez vérifier la sortie de l'appel à 7z et rechercher les noms de fichiers. Voici à quoi ressemble la sortie de 7z:
$ 7z l sample.Zip
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7Zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)
Scanning the drive for archives:
1 file, 472 bytes (1 KiB)
Listing archive: sample.Zip
--
Path = sample.Zip
Type = Zip
Physical Size = 472
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2018-12-01 17:09:59 ..... 0 0 sample1.txt
2018-12-01 17:10:01 ..... 0 0 sample2.txt
2018-12-01 17:10:03 ..... 0 0 sample3.txt
------------------- ----- ------------ ------------ ------------------------
2018-12-01 17:10:03 0 0 3 files
et comment analyser cette sortie avec python:
import subprocess
def find_header(split_line):
return 'Name' in split_line and 'Date' in split_line
def all_hyphens(line):
return set(line) == set('-')
def parse_lines(lines):
found_header = False
found_first_hyphens = False
files = []
for line in lines:
# After the header is a row of hyphens
# and the data ends with a row of hyphens
if found_header:
is_hyphen = all_hyphens(''.join(line.split()))
if not found_first_hyphens:
found_first_hyphens = True
# now the data starts
continue
# Finding a second row of hyphens means we're done
if found_first_hyphens and is_hyphen:
return files
split_line = line.split()
# Check for the column headers
if find_header(split_line):
found_header=True
continue
if found_header and found_first_hyphens:
files.append(split_line[-1])
continue
raise ValueError("We parsed this zipfile without finding a second row of hyphens")
byte_result=subprocess.check_output('7z l sample.Zip', Shell=True)
str_result = byte_result.decode('utf-8')
line_result = str_result.splitlines()
files = parse_lines(line_result)
Décortiquer et appeler 7z extraira des fichiers et vous pourrez open()
ces fichiers.
Si vous souhaitez regarder à l'intérieur d'une archive 7z directement dans Python, vous devrez utiliser une bibliothèque. En voici un: https://pypi.python.org/pypi/libarchive - Je ne peux pas en témoigner comme je l'ai dit - je ne suis pas un Python utilisateur - mais l'utilisation d'une bibliothèque tierce est généralement assez facile dans toutes les langues.
Généralement, le support 7z semble limité. Si vous pouvez utiliser des formats alternatifs (Zip/gzip), je pense que vous trouverez que la gamme de bibliothèques Python (et exemple de code) est plus complète.
J'espère que ça t'as aidé.