在python中读取csv压缩文件

Ely*_*sta 16 csv zip python-2.7

我正在尝试从压缩的csv文件中获取数据.有没有办法在不解压缩整个文件的情况下执行此操作?如果没有,我如何解压缩文件并有效地阅读它们?

Yar*_*ron 34

我使用"zipfile"模块直接导入ZIP和pandas数据帧.假设文件名是"intfile",它在zip中名为"THEZIPFILE".

import pandas as pd
import zipfile

zf = zipfile.ZipFile('C:/Users/Desktop/THEZIPFILE.zip') 
df = pd.read_csv(zf.open('intfile.csv'))
Run Code Online (Sandbox Code Playgroud)


vol*_*238 33

如果您不使用 Pandas,则可以完全使用标准库来完成。这是 Python 3.7 代码:

import csv
from io import TextIOWrapper
from zipfile import ZipFile

with ZipFile('yourfile.zip') as zf:
    with zf.open('your_csv_inside_zip.csv', 'r') as infile:
        reader = csv.reader(TextIOWrapper(infile, 'utf-8'))
        for row in reader:
            # process the CSV here
            print(row)
Run Code Online (Sandbox Code Playgroud)

  • 我尝试这样做,但没有意识到我需要 io.TextIOWrapper。我怎么知道? (3认同)

Har*_*sad 19

一个快速的解决方案可以使用下面的代码!

import pandas as pd

#pandas support zip file reads
df = pd.read_csv("/path/to/file.csv.zip")
Run Code Online (Sandbox Code Playgroud)


小智 9

zipfile also supports the with statement.

So adding onto yaron's answer of using pandas:

with zipfile.ZipFile('file.zip') as zip:
    with zip.open('file.csv') as myZip:
        df = pd.read_csv(myZip) 
Run Code Online (Sandbox Code Playgroud)


Art*_*and 8

认为 Yaron 有最好的答案,但认为我会添加一个代码,该代码遍历 zip 文件夹中的多个文件。然后它会附加结果:

import os
import pandas as pd
import zipfile

curDir = os.getcwd()
zf = zipfile.ZipFile(curDir + '/targetfolder.zip')
text_files = zf.infolist()
list_ = []

print ("Uncompressing and reading data... ")

for text_file in text_files:
    print(text_file.filename)
    df = pd.read_csv(zf.open(text_file.filename)
    # do df manipulations
    list_.append(df)

df = pd.concat(list_)
Run Code Online (Sandbox Code Playgroud)


bry*_*cem 5

是的。你想要模块“zipfile”

您打开 zip 文件本身 zipfile.ZipInfo([filename[, date_time]])

然后,您可以使用ZipFile.infolist()枚举 zip 中的每个文件,并使用ZipFile.open(name[, mode[, pwd]])


小智 5

这是我一直使用的最简单的东西。

import pandas as pd
df = pd.read_csv("Train.zip",compression='zip')
Run Code Online (Sandbox Code Playgroud)