2017-04-25 6 views
0

Wie würde ich in Python in eine CSV-Datei schreiben?Suchen einer Zelle in einer CSV-Datei?

Ich habe im Grunde 2 Spalten. Die erste Spalte ist eine Liste von Transaktionsnamen, die zweite Spalte ist Timings.

Ich muss ein Stück Code erstellen, der die Timings-Spalte aktualisieren kann, wenn ein Benutzer ein Eingabefeld ausfüllt.

Ich habe die Eingabebox in tkinter eingerichtet und habe die Textvariable bereit. Ich bin in Ordnung mit dem Erhalten der Variablen, aber das Problem, das ich habe, nimmt die Textvariable und findet die richtige Zelle in der CSV-Datei und überschreibt sie.

Im Wesentlichen möchte ich die richtige Zelle finden und den Wert über Whats in der CSV-Datei einfügen.

irgendwelche Ideen?

dank

+0

Vielleicht überprüfen Sie das Modul 'Pandas' und die Funktionen' read_csv' und 'write_csv'? –

Antwort

2

Sie können eine temporäre Datei, kopieren Sie die Zeilen in die tmp-Datei erstellen und dann nur die Zeile ersetzen, die mit der Transaktion Namen beginnt. Unter der Annahme einer CSV mit dem Tupel [Name, Wert] pro Zeile, können Sie so etwas wie folgt verwenden:

from tempfile import mkstemp 
from os import close 
from shutil import move 

def update(filename, name, value): 
    fd, path = mkstemp() 
    with open(path,'w') as tmpfile: 
     with open(filename) as csv: 
      for line in cvs: 
       if line.startswith(name): 
        tmpfile.write(",".join([name,value])) 
       else: 
        tmpfile.write(line) 
    close(fd) 
    move(path, filename) 
+0

Nette iterative Lösung, obwohl das OP vielleicht das 'csv'-Modul zum Lesen und Schreiben der Dateien verwenden möchte, da es die vielen Dialekte des CSV-Dateiformats, die es in der realen Welt gibt, einfach handhabt. – martineau

1

Sie haben Angenommen, eine Datei namens file.csv die wie folgt aussieht:

Col1,Col2 
entry1,timestamp1 
entry2,timestamp2 

können Sie verwenden die csv-Bibliothek wie diese einen Eintrag ändern und es in einer neuen .csv.new Datei einfügen (Sie können die ‚.new‘ Erweiterung entfernen können wählen, aber es wird Ihre alte Datei überschreiben):

import csv 
csv_file = "file.csv" 

file_dict = {} 
with open(csv_file, mode='rb') as f: 
    reader = csv.reader(f) 
    top_row = next(reader) 
    for row in reader: 
     file_dict[row[0]] = row[1] 

# get transaction name and timing 
transaction_name = "entry1" 
timing = "timestamp3" 

# do the update 
file_dict[transaction_name] = timing 

# create updated version of file 
with open(csv_file+".new", mode='wb') as out_f: 
    writer = csv.writer(out_f) 
    writer.writerow(top_row) 
    writer.writerows(file_dict.items()) 

Hinweis: dieser w wahrscheinlich neu ordnen Sie Ihre CSV-Datei. Sie haben nicht angegeben, ob dies ein Problem war oder nicht. Wenn dies der Fall ist, können Sie das Diktat sortieren oder ein OrderedDict verwenden. Sehen Sie hier für weitere Informationen: https://docs.python.org/2/library/collections.html#collections.OrderedDict

+0

Dies erfordert das Lesen der gesamten Datei in den Speicher, was ein Problem sein kann (und in jedem Fall unnötig ist). – martineau

+0

Ich erhalte einen Syntaxfehler bei der obigen Lösung beim allerersten file_dict = {}. Ist das, weil es der dritte Teil einer Funktion ist? es beginnt als def updatetimings(): fragen = messagebox.askquestion ('Validierung', 'Sind Sie sicher, dass Sie Timings aktualisieren?') wenn fragen == 'Ja': Versuch: \t newv5ctiming = Schwimmer (newv5c .get()) \t newv62timing = float (newv62.get()) \t newdisptiming = float (newdisp.get()) \t csv_file = "Timings.csv" timings_list = [] die ersten Schritte arbeiten gut, aber eine Syntax erscheint, wenn es file_dict = {} –

+0

Was ist der Fehler, den Sie bekommen? Möglicherweise müssen Sie es nachschlagen oder eine weitere Überlauffrage posten, wenn es nicht bereits hier ist. – supernun

Verwandte Themen