2010-03-02 19 views
89

Próbuję dodać nowy wiersz do mojego starego pliku csv. Zasadniczo jest aktualizowany przy każdym uruchomieniu skryptu Python.Dołącz nowy wiersz do starego pliku CSV python

W tej chwili zapisuję stare wartości wierszy csv na liście, a następnie usuwam plik csv i tworzę go ponownie z nową wartością listy.

Chcesz wiedzieć, czy istnieją lepsze sposoby na zrobienie tego.

Odpowiedz

118
fd = open('document.csv','a') 
fd.write(myCsvRow) 
fd.close() 

Otwieranie pliku z parametrem 'a' pozwala na dołączenie do końca pliku zamiast po prostu nadpisanie istniejącej zawartości. Spróbuj tego.

+1

Próbowałem fp = open (csv_filepathwithname, "wa") writer = csv.pisarz (fp) somelist = [3,56,3,6,56] writer.writerow ((somelist)) , ale tylko ostatni wiersz zostanie dołączony do pliku. – laspal

8

Czy otwierasz plik w trybie "a" zamiast "w"?

Patrz Reading and Writing Files w Dokumentach pytona

7,2. Odczytywanie i zapisywanie plików

open() zwraca obiekt pliku i jest najczęściej używany z dwoma argumentami: open (nazwa pliku, tryb).

>>> f = open('workfile', 'w') 
>>> print f <open file 'workfile', mode 'w' at 80a0960> 

Pierwszy argument jest ciągiem zawierającym nazwę pliku. Drugi argument to inny ciąg znaków zawierający kilka znaków opisujących sposób, w jaki plik zostanie użyty. trybem może być "r", gdy plik będzie tylko odczytany, "w" tylko do zapisu (istniejący plik o tej samej nazwie zostanie usunięty ), a "a" otwiera plik do dodania; wszelkie dane zapisane do plik jest automatycznie dodawany do końca. "r +" otwiera plik dla odczytu i zapisu . Argument trybu jest opcjonalny; Wartość "r" zostanie przyjęta jako , jeśli zostanie pominięta.

W systemie Windows "b" dołączony do trybu otwiera plik w trybie binarnym, więc istnieją również tryby takie jak "rb", "wb" i "r + b". Python w systemie Windows rozróżnia pliki tekstowe i binarne; Znaki końca linii w plikach tekstowych są automatycznie zmieniane nieznacznie po odczytaniu lub zapisaniu danych. Ta zakulisowa modyfikacja pliku danych jest dobra dla plików tekstowych ASCII, ale spowoduje uszkodzenie danych binarnych, takich jak ten w plikach JPEG lub EXE. Zachowaj ostrożność, aby użyć trybu binarnego podczas czytania i zapisywania takich plików. W systemie Unix nie ma problemu z dodaniem trybu "b" do , więc można go używać niezależnie od platformy dla wszystkich plików binarnych .

+0

może sprawisz, że twoja odpowiedź będzie bardziej dopracowana, wtedy będzie wyglądać jak prawdziwa odpowiedź :-) – user702846

+0

@user, dodałem link - czy to ci pomoże? –

59

Preferuję to rozwiązanie przy użyciu modułu csv ze standardowej biblioteki i instrukcji with, aby uniknąć pozostawienia otwartego pliku.

Kluczowym punktem jest użycie 'a' do dołączenia po otwarciu pliku.

import csv 
fields=['first','second','third'] 
with open(r'name', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(fields) 

Możesz napotkać niepotrzebne nowe linie w systemie Windows. Możesz spróbować ich uniknąć, używając 'ab' zamiast 'a'.