Чтение CSV из Zip-файла

У меня есть каталог zip-файлов (около 10 000 небольших файлов), в каждом из которых находится CSV-файл, который я пытаюсь прочитать и разбить на несколько разных CSV-файлов.

Мне удалось написать код для разделения CSV-файлов из каталога CSV, показанного ниже, который читает первый атрибут CSV и в зависимости от того, что он записывает в соответствующий CSV.

import csv import os import sys import re import glob reader = csv.reader(open("C:/Projects/test.csv", "rb"), delimiter=',', quotechar='"') write10 = csv.writer(open('ouput10.csv', 'w'), delimiter=',', lineterminator='\n', quotechar='"', quoting=csv.QUOTE_NONNUMERIC) write15 = csv.writer(open('ouput15.csv', 'w'), delimiter=',', lineterminator='\n', quotechar='"', quoting=csv.QUOTE_NONNUMERIC) headings10=["RECORD_IDENTIFIER","CUSTODIAN_NAME","LOCAL_CUSTODIAN_NAME","PROCESS_DATE","VOLUME_NUMBER","ENTRY_DATE","TIME_STAMP","VERSION","FILE_TYPE"] write10.writerow(headings10) headings15=["RECORD_IDENTIFIER","CHANGE_TYPE","PRO_ORDER","USRN","STREET_DESCRIPTION","LOCALITY_NAME","TOWN_NAME","ADMINSTRATIVE_AREA","LANGUAGE"] write15.writerow(headings15) for row in reader: type = row[0] if "10" in type: write10.writerow(row) elif "15" in type: write15.writerow(row) 

Поэтому я теперь пытаюсь читать Zip-файлы, а не тратить время на их извлечение.

Это то, что я до сих пор наблюдал за множеством обучающих программ, которые я нашел

 import glob import os import csv import zipfile import StringIO for name in glob.glob('C:/Projects/abase/*.zip'): base = os.path.basename(name) filename = os.path.splitext(base)[0] datadirectory = 'C:/Projects/abase/' dataFile = filename archive = '.'.join([dataFile, 'zip']) fullpath = ''.join([datadirectory, archive]) csv = '.'.join([dataFile, 'csv']) filehandle = open(fullpath, 'rb') zfile = zipfile.ZipFile(filehandle) data = StringIO.StringIO(zfile.read(csv)) reader = csv.reader(data) for row in reader: print row 

Однако и ошибка бросается

AttributeError: объект 'str' не имеет атрибута 'reader'

Надеюсь, кто-то может показать мне, как изменить код чтения CSV, который работает для чтения Zip-файла.

Очень признателен

Тим

One Solution collect form web for “Чтение CSV из Zip-файла”

Простое исправление. Вы переопределяете модуль csv своей локальной переменной csv . Просто измените имя этой переменной:

 import glob import os import csv import zipfile import StringIO for name in glob.glob('C:/Projects/abase/*.zip'): base = os.path.basename(name) filename = os.path.splitext(base)[0] datadirectory = 'C:/Projects/abase/' dataFile = filename archive = '.'.join([dataFile, 'zip']) fullpath = ''.join([datadirectory, archive]) csv_file = '.'.join([dataFile, 'csv']) #all fixed filehandle = open(fullpath, 'rb') zfile = zipfile.ZipFile(filehandle) data = StringIO.StringIO(zfile.read(csv_file)) #don't forget this line! reader = csv.reader(data) for row in reader: print row 
  • Python zipfile.extract () не извлекает все файлы
  • Мониторинг извлечений файлов ZIP Python
  • Создать zip-файл из генератора в Python?
  • Создайте зашифрованный ZIP-файл в Python
  • Разархивировать zip-файлы в python
  • Как создать кортежи из одного списка с буквенно-числовыми символами?
  • Замена динамических файлов в App Engine (Python)
  • Zipfile
  • Python - лучший язык программирования в мире.