Hello!
I'm writing my first Kivy-App, so please treat my like a child :-)
I want my app to import a csv (in.csv) to a list of dictionaries (result) every time it starts. My problem come by my requirement of symbols like ä, ö, ü.
On
strackoverflow someone helped me with this python-code:
import codecs
import csv
def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')
def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
# csv.py doesn't do Unicode; encode temporarily as UTF-8:
csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
dialect=dialect, **kwargs)
for row in csv_reader:
# decode UTF-8 back to Unicode, cell by cell:
yield [unicode(cell, 'utf-8') for cell in row]
with codecs.open('in.csv', encoding='utf-8') as f:
reader = unicode_csv_reader(f)
keys = [k.strip() for k in reader.next()]
result = []
for row in reader:
d=dict(zip(keys, row))
result.append(d)
for d in result:
for k, v in d.iteritems():
print k, v
print result
This code works fine in a standalone file. My question now is:
How do I paste this code in my main.py?I tried it like this:
class TestApp(App):
def build(self):
self.load_csv()
def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')
def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
# csv.py doesn't do Unicode; encode temporarily as UTF-8:
csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
dialect=dialect, **kwargs)
for row in csv_reader:
# decode UTF-8 back to Unicode, cell by cell:
yield [unicode(cell, 'utf-8') for cell in row]
def load_csv(self):
with codecs.open('in.csv', encoding='utf-8') as f:
reader = unicode_csv_reader(f)
keys = [k.strip() for k in reader.next()]
result = []
for row in reader:
d=dict(zip(keys, row))
result.append(d)
print (result)
But I've got the "NameError: global name 'unicode_csv_reader' is not defined". So I added a "self":
reader = self.unicode_csv_reader(f)
That seems to work. But now I've got the "Name Error: global name 'utf_8_encoder' is not defined". So I tried with another "self":
csv_reader = csv.reader(self.utf_8_encoder(unicode_csv_data),
That doesn't work. I've got the " "Name Error: global name 'self' is not defined". Same result if I'm writing
@property
def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')
I think I've got a lack of basic understanding. Maybe someone can help me!?