Mam plik CSV z nazwami kolumn dużymi literami. Czytam dane przy użyciu csv.dictreader, ale potrzebuję nazw kolumn małymi literami.Python dictreader - jak zmienić małe kolumny w CSV?
znalazłem ten kod tutaj 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())
Moim problemem jest to, że gdy uruchamiam to z
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()
otrzymuję ten błąd
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
Dziękuję wam za sugestie. Znalazłem inny sposób obejścia tego problemu, ale szczerze mówiąc nie pamiętam, co to było. Spróbowałem Martijna, ale to nie działało dla mnie. – PrestonDocks
Przykro mi, że moje rozwiązanie nie działa dla ciebie; gdybyś dał mi znać, jakie problemy napotkaliście, być może pomogłem wam je przezwyciężyć. Jak widać z mojej odpowiedzi przetestowałem dla ciebie kod. –