Использование csvreader для gzip-файла в Python

У меня есть куча сжатых с помощью gzip файлов CSV, которые я хотел бы открыть для проверки с помощью встроенного в Python читателя CSV. Я бы хотел сделать это, не распаковывая их на диск вручную. Думаю, я хочу каким-то образом получить поток несжатых данных и передать его в читатель CSV. Возможно ли это в Python?

27
задан Martijn Pieters 27 July 2014 в 23:27
поделиться

2 ответа

Используйте модуль gzip:

with gzip.open(filename) as f:
    reader = csv.reader(f)
    #...
33
ответ дан 28 November 2019 в 04:36
поделиться

более полное решение:

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__()

теперь вы можете использовать его следующим образом:

r = GZipCSVReader('my.csv')
for map in r:
    for k,v in map:
        print k,v
r.close()

РЕДАКТИРОВАТЬ: после комментария ниже, как насчет более простого подхода:

def gzipped_csv(filename):
    with gzip.open(filename) as f:
        r = csv.DictReader(f)
        for row in r:
            yield row

, что давайте тогда

for row in gzipped_csv(filename):
    for k, v in row:
        print(k, v)
7
ответ дан 28 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: