用Python解压一个或多个压缩文件的存档(详细指南)

644 阅读2分钟

你是否需要用Python解压文件,保留或不保留文件结构?在这篇短文中,你可以找到几个将单个或多个文件解压到同一文件夹的例子。

第1步:从压缩文件中解压单个文件

首先,让我们有一个名为:archive.zip 的压缩文件。该文件可以从这里获得。证券交易所数据

它里面有3个csv文件:

  • indexProcessed.csv
  • indexInfo.csv
  • indexData.csv

如果你想从中只提取一个文件--indexProcessed.csv ,那么你可以使用下一个Python片段:

import zipfile

path = '/home/myuser/Downloads/'

archive = zipfile.ZipFile(f'{path}archive.zip')

for file in archive.namelist():
    if file.startswith('indexProcessed.csv'):
        archive.extract(file, path)

归档文件位于文件夹:/home/myuser/Downloads/ ,目标文件将在同一位置被提取。

这段代码使用了库zipfile 。它读取档案并遍历里面的所有文件。

然后检查文件是否以indexProcessed.csv 开头,如果是,它将把它提取到目标路径。

为了提取多个文件,你可以改变if条件以满足你的需要。

第2步:从压缩文件中解压所有文件

如果你想从一个压缩包中提取所有的文件,该怎么办?我们将再次使用zipfile 。这一次,我们将使用extractall 来代替extract 方法:

import zipfile

path = '/home/myuser/Downloads/'

zipfilepath = f'{path}archive.zip'
extractiondir = f'{path}/extract'

zip = zipfile.ZipFile(zipfilepath)
zip.extractall(path=extractiondir)

同样,档案文件位于/home/myuser/Downloads/ 。输出的文件夹将是/home/myuser/Downloads/extract

注意,这个方法将提取整个结构--所有的文件和文件夹都是递归的:

Unzip One Or Multiple Zipped Files in a Archive With Python

第3步:解压缩所有文件,但不保留结构

要从一个压缩文件中解压所有的文件而不保留原来的结构,你可以使用模块os ,以改变目标文件夹为:

import zipfile
import os

path = '/home/myuser/Downloads/'
archive = f'{path}/archive.zip'

with zipfile.ZipFile(archive) as zipfile:
    for zip_info in zipfile.infolist():
        if zip_info.filename[-1] == '/':
            continue
        zip_info.filename = os.path.basename(zip_info.filename)
        zipfile.extract(zip_info, f'{path}/extract')

上面的代码将以递归方式将所有文件解压缩到目标文件夹/home/myuser/Downloads/extract

第4步:从压缩文件中解压所有CSV文件

最后让我们看看如何从压缩包中只提取CSV文件。这可以通过CSV扩展名过滤文件来完成。我们将使用方法endswith

import zipfile

path = '/home/myuser/Downloads/'

archive = zipfile.ZipFile(f'{path}archive.zip')

for file in archive.namelist():
    if file.endswith('.csv'):
        archive.extract(file, path)