2013-08-07 1 views
7

Z tego, co badałem, csv.writeRow powinien zająć listę, a następnie zapisać ją w podanym pliku csv. Oto, co próbowałem:Python's csv.writerow() działa tad funky

from csv import writer 
with open('Test.csv', 'wb') as file: 
     csvFile, count = writer(file), 0 
     titles = ["Hello", "World", "My", "Name", "Is", "Simon"] 
     csvFile.writerow(titles) 

Po prostu próbuję napisać tak, aby każde słowo znajdowało się w innej kolumnie.

Podczas otwierania pliku, który tworzy jednak, pojawia się następujący komunikat:

enter image description here

Po naciśnięciu kontynuować anyways, dostaję komunikat, że plik jest albo uszkodzony, albo jest plik SYLK. Mogę następnie otworzyć plik, ale tylko po przejściu przez dwa komunikaty o błędach za każdym razem, gdy otworzę plik.

Dlaczego tak jest?

Dzięki!

+6

Czy kod jest wyświetlany dokładnie w tym, co używasz? Jest to udokumentowany problem (http://support.microsoft.com/kb/323626), że program Excel przyjmie plik CSV SYLK, jeśli pierwsze dwa znaki to "ID". –

+0

wersja Windows/Excel? Uruchomiłem twój kod jako wysłany i działa. Problem nie jest obecny. – sihrc

+0

@PeterDeGlopper Masz 100% racji, i jestem pod wrażeniem tego, jak to rozgryzłeś. Nie sądzę, aby zawartość listy mogła wiele zmienić. – Cisplatin

Odpowiedz

14

To jest documented issue, że program Excel przyjmie plik CSV SYLK, jeśli pierwsze dwa znaki są "ID".

Wychodzenie w sferę opinii - nie powinno, ale Excel uważa, że ​​wie lepiej niż rozszerzenie. Aby być uczciwym, ludzie oczekują, że będzie w stanie określić przypadki, w których rozszerzenie jest naprawdę błędne, ale w takim przypadku zakładając, że rozszerzenie jest błędne, a następnie przyjmując, że plik jest uszkodzony, gdy nie jest uszkodzony, jeśli zostanie zinterpretowany zgodnie z rozszerzeniem jest po prostu zadziwiające.

@John Y zaznacza:

Jedno uważać za: „obejście” podane przez Microsoft kwestii związanej przez @PeterDeGlopper jest (ręcznie) poprzedzić apostrof do pliku. (Jest to również popularna rada w Internecie, w tym StackOverflow, aby spróbować wymusić na cyfrach CSV łańcuchy, a nie liczby.) Nie jest to to, co nazwałbym dobrą radą, ponieważ wstawia dosłowny apostrof do twoich danych .

@DSM sugeruje użycie quoting=csv.QUOTE_NONNUMERIC na pisarzu. Excel nie jest zdezorientowany przez plik zaczynający się od "ID" zamiast ID, więc jeśli inne narzędzia, które będą pracować z CSV, akceptują ten poziom cytowania, jest to prawdopodobnie najlepsze rozwiązanie, inne niż ignorowanie pomyłki Excela.

+0

Czy wymuszałby cytowanie z 'quoting = csv.QUOTE_NONNUMERIC'? – DSM

+0

@DSM, wygląda na to, że uniemożliwiłoby uruchamianie pliku z 'ID', więc warto spróbować. –

+0

@DSM - Przetestowałem to i zapobiega to błędnej identyfikacji SYLK. Więc jeśli jest to możliwe do zaakceptowania przez cokolwiek innego z plikiem csv, który jest prawdopodobnie najlepszym rozwiązaniem. –