如何处理压缩文件夹中的 CSV 文件?

Posted

技术标签:

【中文标题】如何处理压缩文件夹中的 CSV 文件?【英文标题】:How to work with CSV files inside a zipped folder? 【发布时间】:2017-11-27 19:03:14 【问题描述】:

我第一次在 python 中处理压缩文件,我很难过。

我阅读了 zipfile 的文档,但我不确定什么是做我想做的事情的最佳方法。我有一个压缩文件夹,里面有 CSV 文件,我希望能够打开 zip 文件,并从里面的 csv 文件中检索某些值。

我是否使用 zipfile.extract(file name here) 将其带到当前工作目录?如果我这样做,我只是使用文件名来处理文件,还是以不同的方式索引或列出它们?

目前,我手动将压缩文件夹中的所有文件提取到我的项目的当前工作目录,然后使用 csv 模块读取它们。我真正想做的就是删除这一步。

我们将不胜感激任何和所有的帮助!

【问题讨论】:

***.com/questions/3451111/unzipping-files-in-python。正如这个问题的答案所示,extract 方法的参数不是文件名,而是要提取到的目录。 你应该尝试一下,看看会发生什么。 【参考方案1】:

您希望避免提取到磁盘,在zip docs for python 中有ZipFile.open(),它为您提供了一个类似文件的对象。这是一个对象,其行为主要类似于磁盘上的常规文件,但它位于内存中。它在读取时会给出一个字节数组,至少在 py3 中是这样。

这样的……

from zipfile import ZipFile
import csv


with ZipFile('abc.zip') as myzip:
    print(myzip.filelist)
    for mf in myzip.filelist:
        with myzip.open(mf.filename) as myfile:
            mc = myfile.read()
            c = csv.StringIO(mc.decode())
            for row in c:
                print(row)

一旦你学会了如何查找东西以及文档中使用的一些基本编程术语/描述,Python 的文档实际上是相当不错的。 由于某种原因,csv.BytesIO 未实现,因此通过csv.StringIO 进行了额外的步骤。

【讨论】:

以上是关于如何处理压缩文件夹中的 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Spark 中的多个 csv.gz 文件?

如何处理 bash 脚本读取的 CSV 文件中的逗号

如何处理 r 语言的 50GB 大 csv 文件?

使用Python如何处理csv文件?

Ruby--如何处理csv文件?

WP7 - 从 CSV 文件中读取?或者如何处理数据?