首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中对gzipped文件使用csvreader

在Python中对gzipped文件使用csvreader
EN

Stack Overflow用户
提问于 2012-02-13 05:25:57
回答 3查看 27.1K关注 0票数 30

我有一堆gzipped的CSV文件,我想用Python内置的CSV阅读器打开它们进行检查。我想这样做,而不必首先手动将它们解压缩到磁盘。我想我想以某种方式获得一个流到未压缩的数据,并将其传递到CSV阅读器。这在Python中是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-13 05:28:28

使用gzip模块:

代码语言:javascript
复制
with gzip.open(filename, mode='rt') as f:
    reader = csv.reader(f)
    #...
票数 41
EN

Stack Overflow用户

发布于 2013-12-23 00:23:03

我已经尝试了上面的版本来写和读,但由于"bytes“错误,它在Python3.3中不能工作。然而,经过一些尝试和错误之后,我可以让下面的代码工作。也许它也能帮助其他人:

代码语言:javascript
复制
import csv
import gzip
import io


with gzip.open("test.gz", "w") as file:
    writer = csv.writer(io.TextIOWrapper(file, newline="", write_through=True))
    writer.writerow([1, 2, 3])
    writer.writerow([4, 5, 6])

with gzip.open("test.gz", "r") as file:
    reader = csv.reader(io.TextIOWrapper(file, newline=""))
    print(list(reader))

正如amohr建议的那样,下面的方法也是有效的:

代码语言:javascript
复制
import gzip, csv

with gzip.open("test.gz", "wt", newline="") as file:
    writer = csv.writer(file)
    writer.writerow([1, 2, 3])
    writer.writerow([4, 5, 6])

with gzip.open("test.gz", "rt", newline="") as file:
    reader = csv.reader(file)
    print(list(reader))
票数 29
EN

Stack Overflow用户

发布于 2013-01-13 18:59:30

更完整的解决方案:

代码语言:javascript
复制
import csv, gzip
class GZipCSVReader:
    def __init__(self, filename):
        self.gzfile = gzip.open(filename)
        self.reader = csv.DictReader(self.gzfile)
    def next(self):
        return self.reader.next()
    def close(self):
        self.gzfile.close()
    def __iter__(self):
        return self.reader.__iter__()

现在您可以像这样使用它:

代码语言:javascript
复制
r = GZipCSVReader('my.csv')
for map in r:
    for k,v in map:
        print k,v
r.close()

编辑:在下面的评论之后,使用一种更简单的方法如何:

代码语言:javascript
复制
def gzipped_csv(filename):
    with gzip.open(filename) as f:
        r = csv.DictReader(f)
        for row in r:
            yield row

那就让你

代码语言:javascript
复制
for row in gzipped_csv(filename):
    for k, v in row:
        print(k, v)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9252812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档