在python中读取csv压缩文件
Posted
技术标签:
【中文标题】在python中读取csv压缩文件【英文标题】:Reading csv zipped files in python 【发布时间】:2015-01-12 13:57:15 【问题描述】:我正在尝试从压缩的 csv 文件中获取数据。有没有办法在不解压缩整个文件的情况下做到这一点?如果没有,我怎样才能解压缩文件并有效地阅读它们?
【问题讨论】:
在此处查看我的答案 [无需下载 zip 文件]***.com/a/45771620/348168 【参考方案1】:如果你有一个文件名:my_big_file.csv
并且你用相同的名称压缩它my_big_file.zip
你可以这样做:
df = pd.read_csv("my_big_file.zip")
注意:首先检查您的 pandas 版本(不适用于旧版本)
【讨论】:
【参考方案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 字节/字符串问题。
【讨论】:
【参考方案3】:我使用 zipfile
模块将 ZIP 直接导入到 pandas 数据帧。
假设文件名是“intfile”,它在名为“THEZIPFILE”的 .zip 中:
import pandas as pd
import zipfile
zf = zipfile.ZipFile('C:/Users/Desktop/THEZIPFILE.zip')
df = pd.read_csv(zf.open('intfile.csv'))
【讨论】:
这是关于这个主题的最有用(和简洁)的一个。谢谢!【参考方案4】:这是我一直使用的最简单的东西。
import pandas as pd
df = pd.read_csv("Train.zip",compression='zip')
【讨论】:
【参考方案5】:如果您不使用 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)
【讨论】:
我尝试这样做并没有意识到我需要 io.TextIOWrapper。我怎么会知道? @KenIngram ZipFile.open() 给出一个 zipfile.ZipExtFile 对象。内置函数open()函数直接返回一个_io.TextIOWrapper对象 酷。感谢您的信息。【参考方案6】:可以使用下面的代码快速解决!
import pandas as pd
#pandas support zip file reads
df = pd.read_csv("/path/to/file.csv.zip")
【讨论】:
出色的答案!我检查使用没有“.csv”扩展名的相同解决方案是否也有效:df = pd.read_csv("/path/to/file.zip")
【参考方案7】:
Modern Pandas 从 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
【讨论】:
【参考方案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_)
【讨论】:
【参考方案9】:zipfile 也支持 with 语句。
所以添加到 yaron 使用 pandas 的答案:
with zipfile.ZipFile('file.zip') as zip:
with zip.open('file.csv') as myZip:
df = pd.read_csv(myZip)
【讨论】:
【参考方案10】:是的。你想要模块'zipfile'
你用zipfile.ZipInfo([filename[, date_time]])
打开压缩文件本身
然后您可以使用 ZipFile.infolist()
枚举 zip 中的每个文件,并使用 ZipFile.open(name[, mode[, pwd]])
提取它
【讨论】:
以上是关于在python中读取csv压缩文件的主要内容,如果未能解决你的问题,请参考以下文章