2011-11-04 13 views
9

मेरे पास निर्देशिका में बहुत सी .csv फ़ाइलें हैं और मैं उनमें से प्रत्येक को पाइथन के अंदर एक लूप में खोलना चाहता हूं जैसे कि पहले .csv सूची में पढ़ा जाता है [0] और दूसरा .csv सूची में पढ़ा जाता है [1] और इसी तरह।पाइथन सूची में .csv फ़ाइलों को पढ़ना

दुर्भाग्य से, जबकि मेरा कोड सभी .csv फ़ाइलों के माध्यम से loops, यह सभी .csv फ़ाइलों को सूची में डालता है [0]। मैं अपना कोड कैसे संशोधित कर सकता हूं ताकि मैं ऊपर अपना लक्ष्य प्राप्त कर सकूं? बहुत धन्यवाद।

जॉन

कोड यह रहा:

def create_data_lists(): 
i=0 
for symbol in symbols: 
    with open(symbols[i]+'.csv', 'r') as f: 
     print i 
     reader = csv.reader(f) 
     reader.next() 
     for row in reader: 
      rowdata.append(row) 
    data_by_symbol.append(rowdata) 
    i=i+1 
+0

जब आप 'इन ... इन' का उपयोग कर रहे हैं तो आपको इंडेक्सिंग का उपयोग करने की आवश्यकता नहीं है, इसलिए आप 'ओपन (प्रतीक ...)' के साथ 'ओपन (प्रतीकों [i] ...) 'को प्रतिस्थापित कर सकते हैं, और प्राप्त कर सकते हैं सभी 'i' से छुटकारा पाएं। – tjm

उत्तर

11
अंदर पाश के लिए

, शीर्ष के निकट, आप सूची rowdata ताज़ा करने के लिए की है। अन्यथा आप उसमें हमेशा के लिए जोड़ रहे हैं। के रूप में मैं वास्तव में इसे उपयोग नहीं कर रहा

+0

rowdata = [] जोड़ना चाल है। धन्यवाद! हालांकि, जब मैंने इंडेक्सिंग को हटा दिया, तो मुझे निम्न त्रुटि मिली: "लाइन 35, create_data_lists में खुले (प्रतीकों + 'सीएसवी', 'आरबी') के साथ एफ: टाइप एरर: केवल सूची को जोड़ सकता है (" str "नहीं) सूची " – johnjdc

+0

@johnjdc: 'प्रतीक' और 'प्रतीकों' के बीच का अंतर नोट करें। 'प्रतीकों में प्रतीक के लिए: 'निर्माण, आप सूची कार्यक्रम के प्रत्येक तत्व को एक-एक करके प्राप्त करेंगे, जिससे आपके प्रोग्राम से' i' होने की आवश्यकता समाप्त हो जाएगी। अभिव्यक्ति से परिचित होने के बाद यह कोड को साफ़ कर देता है। आपका कोड मुझे और दूसरों के लिए अनावश्यक लग रहा था, जैसे टीजेएम ने बताया। – yosukesabai

+0

भी, सूची के बजाय 'data_by_symbol' को एक dict (' date_by_symbol = {} 'कहीं भी अपने कोड में) बनाने के लिए समझ में आ सकता है। इस तरह आप उपरोक्त कोड की अंतिम पंक्ति में 'data_by_symbol [प्रतीक] = rowdate' कहते हैं। जब आप इसका उपयोग करते हैं, तो आप mysymbol के लिए डेटा प्राप्त करने के लिए data_by_symbol [mysymbol] कर सकते हैं, या 'sym के लिए, डेटा_by_symbol.items() के लिए डेटा सभी प्रतीकों पर पुनरावृत्त करने के लिए कर सकते हैं। I = 0, i = 1 आदि का अर्थ रखने के रूप में एक और छोटी सुविधा मजेदार नहीं है। – yosukesabai

6

क्यों किसी सूची में पाठक स्वयं की दुकान नहीं है, जैसे rowdata = [] सही print i के बाद

def create_data_lists(): 

    for symbol in symbols: 
     with open(symbol+'.csv', 'r') as f: 
     print symbol 
     rowdata = [] 
     reader = csv.reader(f) 
     reader.next() 
     for row in reader: 
      rowdata.append(row) 
    data_by_symbol.append(rowdata) 

संपादितi से छुटकारा मिला कुछ है?

list_of_csv_files = [] 

for f in filenames: 
    list_of_csv_files.append(csv.DictReader(open(f))) 

यह एक सूची में पाठक ही स्टोर करेगा, आप बाद में इस तरह के रूप में कुछ करने के लिए अनुमति देता है:

for row in list_of_csv_files[0]: 
    # do some processing on the row 

इस विधि का सबसे बड़ा लाभ यह taht आप तो फिल्टर कॉलम की तरह सामान कर सकते हैं आसानी से, जैसे तरीकों का उपयोग कर:

one_row = [row["name of column heading"] for row in list_of_csv_files[0]] 
two_rows = [[row["name col 2"], row["name col 2"]] for row in list_of_csv_files[0]] 

जो मैं पहले से पढ़ (और इस प्रकार de-संरचित) भंडारण csv फ़ाइलें से अपने कार्यक्रम के लिए और अधिक उपयोगी होगा संदेह है।

लेकिन अगर आप वास्तव में सभी CSV फ़ाइलों में पढ़ सकते हैं और एक सूची में संग्रहीत करना चाहते हैं, आप उन सूचियों की एक सूची, की आवश्यकता होगी मैं इस अनुशंसा नहीं करते हैं, यह बहुत अच्छी मेमोरी की होगी:

list_of_csv_files = [[]] 

for f in filenames: 
    list_of_csv_files.append([row.values() for row in csv.DictReader(open(f))]) 
+0

मैं बेहतर तरीके सीखने के लिए उत्सुक हूं - मैं स्वयं सिखाया गया हूं और निश्चित रूप से शुरुआती स्तर हूं। मेरा इरादा पाइथन सूचियों में पढ़े गए सभी .csv डेटा पर गणित संचालन करना है।आपकी पोस्ट से, मैं इसे लेता हूं कि सूचियों की सूचियों का उपयोग करके मेरा कोड धीमा हो जाएगा? मैंने इस विधि को केवल इसलिए चुना क्योंकि यह केवल मुझे पता है कि मुझे आसानी से अंतर करने की अनुमति देता है .csv डेटा जिसका मैं विश्लेषण कर रहा हूं। यदि आपके लक्ष्यों को दिए गए बेहतर सुझाव हैं, तो मैं सभी कान हूं। धन्यवाद। – johnjdc

+0

निश्चित बात, मैं आपको कुछ अलग तकनीक सिखाने के लिए अपना उत्तर बढ़ा दूंगा। – Serdalis

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