大文字の列名を持つCSVファイルがあります。私はcsv.dictreaderを使ってデータを読んでいますが、小文字の列名が必要です。Python dictreader - CSV列名を小文字にするには?
私が見つかりました。ここでは、このコードAccessing csv header white space and case insensitive
import csv
class DictReaderInsensitive(csv.DictReader):
# This class overrides the csv.fieldnames property.
# All fieldnames are without white space and in lower case
@property
def fieldnames(self):
return [field.strip().lower() for field in super(DictReaderInsensitive, self).fieldnames]
def __next__(self):
# get the result from the original __next__, but store it in DictInsensitive
dInsensitive = DictInsensitive()
dOriginal = super(DictReaderInsensitive, self).__next__()
# store all pairs from the old dict in the new, custom one
for key, value in dOriginal.items():
dInsensitive[key] = value
return dInsensitive
class DictInsensitive(dict):
# This class overrides the __getitem__ method to automatically strip() and lower() the input key
def __getitem__(self, key):
return dict.__getitem__(self, key.strip().lower())
私の問題は、私は
datafile = open(self.ifs_data_file,'rU')
csvDict = DictReaderInsensitive(datafile)
for row in csvDict:
print row
#self.db.ifs_data.insert(**row)
#self.db.commit()
でこれを実行すると、私はこのエラー
Traceback (most recent call last):
File "D:\Development\python\supplier_review\supplier_review.py", line 239, in update_ifs_data
for row in csvDict:
File "D:\Python27_5\lib\csv.py", line 103, in next
self.fieldnames
File "D:\Development\python\supplier_review\supplier_review.py", line 288, in fieldnames
return [field.strip().lower() for field in super(DictReaderInsensitive, self).fieldnames]
TypeError: must be type, not classobj
あなたのご提案に感謝します。私はこの問題を回避する別の方法を見つけましたが、正直言ってそれが何であったのか覚えていません。私はMartijn'sを試しましたが、それは私にとってはうまくいかなかったのです。 – PrestonDocks
申し訳ありませんが、私の解決策がうまくいきませんでした。あなたが遭遇したどのような問題が私を克服するのに役立ったのか教えてください。私の答えからわかるように、コードをテストしました。 –