কয়েকটি বিকল্প:
(1) শ্রমসাধ্যভাবে আপনার ক্ষেত্রের নামগুলি থেকে একটি পরিচয়-ম্যাপিং (অর্থাত্ কিছুই করবেন না) তৈরি করুন যাতে CSV.DictWriter এটিকে আবার কোনও তালিকায় রূপান্তর করতে এবং csv.writer দৃষ্টান্তে এটি পাস করতে পারে।
(২) ডকুমেন্টেশনে "অন্তর্নিহিত writer
উদাহরণ" উল্লেখ করা হয়েছে ... সুতরাং কেবল এটি ব্যবহার করুন (উদাহরণের শেষে)।
dw.writer.writerow(dw.fieldnames)
(3) সিএসভি এড়িয়ে চলুন। ডিকট্রাইটার ওভারহেড এবং csv.writer দিয়ে নিজেই করুন
তথ্য লেখার:
w.writerow([d[k] for k in fieldnames])
অথবা
w.writerow([d.get(k, restval) for k in fieldnames])
extrasaction
"কার্যকারিতা" পরিবর্তে আমি নিজে কোডিং করতে পছন্দ করব; আপনি কেবল প্রথম অতিরিক্ত কী নয়, কী এবং মানগুলি দিয়ে সমস্ত "অতিরিক্ত" প্রতিবেদন করতে পারেন। ডিক্ট রাইটারের সাথে আসল উপদ্রবটি হ'ল হ'ল প্রতিটি ডিকটি নির্মিত হচ্ছিল বলে আপনি যদি নিজেই কীগুলি যাচাই করে থাকেন তবে আপনাকে অতিরিক্ততা = 'উপেক্ষা করুন' ব্যবহার করা মনে রাখতে হবে অন্যথায় এটি স্বল্প যাচ্ছে (ক্ষেত্রের নাম একটি তালিকা) চেকটি পুনরাবৃত্তি করুন:
wrong_fields = [k for k in rowdict if k not in self.fieldnames]
============
>>> f = open('csvtest.csv', 'wb')
>>> import csv
>>> fns = 'foo bar zot'.split()
>>> dw = csv.DictWriter(f, fns, restval='Huh?')
# dw.writefieldnames(fns) -- no such animal
>>> dw.writerow(fns) # no such luck, it can't imagine what to do with a list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python26\lib\csv.py", line 144, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\python26\lib\csv.py", line 141, in _dict_to_list
return [rowdict.get(key, self.restval) for key in self.fieldnames]
AttributeError: 'list' object has no attribute 'get'
>>> dir(dw)
['__doc__', '__init__', '__module__', '_dict_to_list', 'extrasaction', 'fieldnam
es', 'restval', 'writer', 'writerow', 'writerows']
# eureka
>>> dw.writer.writerow(dw.fieldnames)
>>> dw.writerow({'foo':'oof'})
>>> f.close()
>>> open('csvtest.csv', 'rb').read()
'foo,bar,zot\r\noof,Huh?,Huh?\r\n'
>>>
dw.writerow( dict((f,f) for f in dr.fieldnames) )
।