如何阅读和保存7z的内容。我使用Python 2.7.9,我可以像这样提取或存档,但是我无法读取python中的内容,我只在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)
答案 0 :(得分:10)
您可以使用libarchive或pylzma。如果你可以升级到python3.3 +,你可以使用标准库中的lzma。
答案 1 :(得分:5)
如果可以使用python 3,则有一个有用的库py7zr,它支持7zip存档压缩,解压缩,加密和解密。
import py7zr
with py7zr.SevenZipFile('sample.7z', mode='r') as z:
z.extractall()
答案 2 :(得分:2)
脱离并调用7z将提取文件,然后您可以使用标准的文件访问调用访问这些文件(我不知道Python - 但它必须能够访问文件!)。
如果你想在Python中直接查看7z存档,那么你需要使用一个库。这是一个:https://pypi.python.org/pypi/libarchive - 我不能像我说的那样担保它 - 我不是Python用户 - 但使用第三方库通常在所有语言中都很容易。
一般来说,7z支持似乎有限。如果你可以使用其他格式(zip / gzip),那么我认为你会发现Python库(和示例代码)的范围更全面。
希望有所帮助。
答案 3 :(得分:2)
在这种情况下,我不得不使用7z,并且还需要确切地知道从每个zip存档中提取了哪些文件。为了解决这个问题,您可以检查对7z的调用输出并查找文件名。这是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
以及如何使用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)
答案 4 :(得分:1)
!pip install pyunpack
!pip install patool
from pyunpack import Archive
Archive('7z file source').extractall('destination')
https://pypi.org/project/patool/
https://pypi.org/project/pyunpack/