2013-07-01 8 views
6

Przy próbie napisania listy dyktów do pliku CSV przyjrzałem się bardzo pomocnej odpowiedzi na poprzednie pytanie na temat numeru SO which can be found here. Kod, którego użyłem:zrozumienie składni csv DictWriter w pytonie

with open((filename), 'wb') as outfile: 
    write = csv.DictWriter(outfile, keyList) 
    write.writer.writerow(keyList) 
    write.writerows(data) 

gdzie keyList jest listą nagłówków dla pliku csv.

Kod działał świetnie, co jest miłe, ale nie rozumiem, dlaczego musiałem wyraźnie wywołać podstawową instancję writer, aby napisać listę keyList (nagłówki). Próbowałem tej linii jako write.writerow(keyList) i nie działało. Jestem ciekawy, dlaczego tak jest, więc mogę lepiej zrozumieć, jak działa DictWriter w Pythonie.

Czy istnieje czyściejszy/przyjemniejszy sposób zapisu tego?

+0

Co robi błąd 'write.writerow (keylist)' rzucać? – Blender

+0

@Blender: 'AttributeError: 'list' obiekt nie ma atrybutu 'get'' –

+0

Daje mi' AttributeError:' obiekt listy 'nie ma atrybutu' get'' – user139014

Odpowiedz

3

Wygląda na to, że polegasz na nieudokumentowanym zachowaniu. Obiekt DictWriter nie ma "oficjalnej" metody .

correct way to output the CSV headers jest wywołanie

write.writeheader() 
+0

ma to sens, ale jak określić nagłówki dla funkcji napinacza? Kiedy próbowałem przekazać keyList w kodzie 'write.writeheader (keyList)' rzucił 'TypeError: writeheader() bierze dokładnie 1 argument (2 dany)' – user139014

+1

@ kg41: Nie musisz - podałeś nagłówki kiedy budowanie obiektu 'DictWriter'. '.writeheader()' jest wywoływane bez parametrów (pojedynczy argument jest niejawnym 'self'). –

+0

Zignoruj ​​mnie, jestem idiotą. Po prostu nazwano 'writeheader()' bez argumentu i zadziałało. Dzięki @Tim. – user139014