在python中读取csv压缩文件

时间:2014-11-15 04:16:43

标签: python-2.7 csv zip

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

10 个答案:

答案 0 :(得分:24)

我使用" zipfile"模块直接导入ZIP和pandas数据帧。 让我们说文件名是" intfile"它的拉链名为" THEZIPFILE"。

import pandas as pd
import zipfile

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

答案 1 :(得分:3)

是。你想要模块'zipfile'

您使用zipfile.ZipInfo([filename[, date_time]])

打开zip文件

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

提取它

答案 2 :(得分:3)

zipfile也支持with语句。

所以加入yaron使用熊猫的答案:

with zipfile.ZipFile('file.zip') as zip:
    with zip.open('file.csv') as myZip:
        df = pd.read_csv(myZip) 

答案 3 :(得分:2)

认为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 _)

答案 4 :(得分:2)

自0.18.1版开始的现代熊猫本机支持压缩的csv文件:其 read_csv 方法具有 compression 参数:{'infer','gzip','bz2', 'zip','xz',无},默认为'推断'。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

答案 5 :(得分:2)

可以使用以下代码作为快速解决方案!

import pandas as pd

#pandas support zip file reads
df = pd.read_csv("/path/to/file.csv.zip")

答案 6 :(得分:2)

假设您正在下载一个包含 CSV 的 zip 文件并且您不想使用临时存储。示例实现如下所示:

#!/usr/bin/env python3

from csv import DictReader
from io import TextIOWrapper, BytesIO
from zipfile import ZipFile

import requests

def all_tickers():
    url = "https://simfin.com/api/bulk/bulk.php?dataset=industries&variant=null"
    r = requests.get(url)
    zip_ref = ZipFile(BytesIO(r.content))
    for name in zip_ref.namelist():
        print(name)
        with zip_ref.open(name) as file_contents:
            reader = DictReader(TextIOWrapper(file_contents, 'utf-8'), delimiter=';')
            for item in reader:
                print(item)

这会处理所有 python3 字节/字符串问题。

答案 7 :(得分:1)

如果您不使用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)

答案 8 :(得分:0)

这是我经常使用的最简单的方法。

import pandas as pd
df = pd.read_csv("Train.zip",compression='zip')

答案 9 :(得分:0)

如果您有一个文件名:my_big_file.csv 并且您使用相同的名称对其进行压缩 my_big_file.zip

你可以简单地这样做:

df = pd.read_csv("my_big_file.zip")

enter image description here