У меня есть куча сжатых с помощью gzip файлов CSV, которые я хотел бы открыть для проверки с помощью встроенного в Python читателя CSV. Я бы хотел сделать это, не распаковывая их на диск вручную. Думаю, я хочу каким-то образом получить поток несжатых данных и передать его в читатель CSV. Возможно ли это в Python?
Используйте модуль gzip
:
with gzip.open(filename) as f:
reader = csv.reader(f)
#...
более полное решение:
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)