2012-02-18 30 views
16

के भीतर से सीएसवी पढ़ें मेरे पास ज़िप फ़ाइलों (लगभग 10,000 छोटी फाइलें) की निर्देशिका है, प्रत्येक में एक सीएसवी फ़ाइल है जिसे मैं कई अलग-अलग सीएसवी फाइलों को पढ़ने और विभाजित करने की कोशिश कर रहा हूं।ज़िप फ़ाइल

मैं सीएसवी फाइलों को सीएसवी की निर्देशिका से विभाजित करने के लिए कोड लिखने में कामयाब रहा, जो नीचे दिखाया गया है, जो सीएसवी के पहले एट्रिब्यूट को पढ़ता है, और इसे रिलीज सीएसवी को लिखने के आधार पर।

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) 

तो अब मैं उन्हें पहले निकालने के समय को बर्बाद करने के बजाय ज़िप फ़ाइलों को पढ़ने की कोशिश कर रहा हूं।

यह है कि मैं क्या है अब तक के रूप में कई ट्यूटोरियल निम्नलिखित के रूप में मैं

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' ऑब्जेक्ट कोई विशेषता 'पाठक'

है

उम्मीद है कि कोई मुझे दिखा सकता है कि मेरे सीएसवी रीडिंग कोड को कैसे बदला जाए जो ज़िप फ़ाइल को पढ़ने के लिए काम करता है।

बहुत

सराहना टिम

+0

शायद यह है कि आपने कोड को कैसे चिपकाया है, लेकिन नाम लूप के लिए शायद ही कुछ भी आपके पास है। त्रुटि का क्या मतलब है? –

उत्तर

19

सरल ठीक। आप 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 
+0

वह शानदार ढंग से खराब है। – tjmgis

+0

हालांकि, यह ज़िप फ़ाइलों के माध्यम से लूप प्रतीत नहीं होता है? – tjmgis

+0

@ उपयोगकर्ता 1218419: अपना इंडेंटेशन जांचें। जैसे स्कॉट हंटर ने नोट किया था, आपका अधिकांश कोड नीचे है, और इसलिए, आपके 'glob.glob (' c: etc ') में नाम के लिए: 'लूप। – DSM

संबंधित मुद्दे