2014-12-11 5 views
10

मैं अजगर (2.6) सीएसवी डिक्ट्रेडर का उपयोग कर रहा हूं। मेरे इनपुट फ़ाइल एक हैडर लाइन जहां स्तंभ नाम रिक्ति है है:पायथन सीएसवी में पिछली जगहों को ट्रिम करने के लिए कैसे करें DictReader कुंजी

colname1,  colname2  ,col3, etc. 
XX, YY, ZZ 

लौटे dict वस्तु है कुंजी() = ['colname1', 'colname2 ', 'col3']

वहाँ प्रमुख और चाबी से रिक्त स्थान अनुगामी ट्रिम करने के लिए एक विकल्प है?

--edit

समस्या प्रसंस्करण में उठता कुंजी नामों से:

with open(fname) as f: 
    r = csv.DictReader(f) 
    for row in r: 
     print "processing", r["column1"], r["column2"] 

फ़ाइलों डेटाबेस उदासीनता है। और डंप प्रोग्राम बहुत स्मार्ट है - यह डेटा के आधार पर आउटपुट कॉलम चौड़ाई समायोजित करता है - जिसका अर्थ है कि चयन के विभिन्न सेट अलग-अलग कॉलम चौड़ाई और विभिन्न कुंजी लंबाई होने जा रहे हैं। कभी-कभी मुझे r['column2 '] और कभी-कभी पैड या रिक्त स्थान का उपयोग करना चाहिए। आउच!

उत्तर

9

बस पहली पंक्ति मैन्युअल रूप से पढ़ें और इसे DictReader पर पास करें।

with open('file.csv') as fh: 
    header = [h.strip() for h in fh.next().split(',')] 
    reader = csv.DictReader(fh, fieldnames=header) 
+1

काश यह csv.DictReader में एक विकल्प था। (क्या ऐसी इच्छासूची व्यक्त करने के लिए कोई जगह है?) – Dinesh

+0

आप सुविधा का अनुरोध करने का प्रयास कर सकते हैं लेकिन संभावना है कि वे इसे जोड़ नहीं पाएंगे। निष्पक्ष होने के लिए, आपका सीएसवी टूटा हुआ है;) – Wolph

+1

हाँ कि सीएसवी * असामान्य * है लेकिन यह एक डेटाबेस डंप है और प्रत्येक विक्रेता के व्यक्तित्व है। लेकिन मुझे नहीं पूछने का नतीजा पता है :) कोई कहां से पूछता है? – Dinesh

1

आप सीएसवी मॉड्यूल

csv.register_dialect('MyDialect', quotechar='"', skipinitialspace=True, quoting=csv.QUOTE_NONE, lineterminator='\n', strict=True) 

फिर जब DictReader बनाने बोली का उपयोग में एक कस्टम बोली रजिस्टर करने की आवश्यकता:

my_reader = csv.DictReader(trip_file, dialect='MyDialect') 

यहाँ सब Dialect Options

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