Чтение 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-файла.

Весьма признателен

Тим

17
задан Stedy 18 February 2012 в 18:25
поделиться