2016-08-09 14 views
0

Ich möchte wissen, ob es möglich ist, die .csv Datei mit bestimmten row lesen, nach dem Lesen der Zeile. Ich möchte diese spezifische Zeile löschen und die Datei .csv mit der nächsten Zeile aktualisieren, wird aufgefahren. Angenommen, die .csv Datei hat Header. Wenn es möglich ist als wie? Ex. unten ist mein sample.csvAscending lesen von CSV und Update CSV mit Python

Time A B 
12:25 5.6 4.5 
12:30 1.2 -3.4 
12:35 4.7 -4.0 

Unten ist der Code, die ich versucht habe:

import csv 
with open('sample.csv', 'rb') as inp, open('sample.csv', "a") as out: 
    writer = csv.writer(out) 
    for row in csv.reader(inp): 
     writer.writerow(row) 

Aber es wird am Ende der Datei angehängt. Ich habe auch versucht, es auf die temporäre Datei für Zwischenstufe zu schreiben. Aber es erfüllt meinen Zweck immer noch nicht, weil ich an der gleichen Datei arbeiten muss. Hier ist die Ausgabe sample.csv, die ich nach einer Iteration lesen mag:

Time A B 
12:30 1.2 -3.4 
12:35 4.7 -4.0 
+1

Ja, es ist möglich, können Sie Ihre Bemühungen zeigen – EdChum

+0

@EdChum Ich bin neu bei 'Python'. Ich bin durch [grundlegende Verbindungen] gegangen (http://stackoverflow.com/questions/16020858/inline-csv-file-editing-with-python). Implementieren Sie diesen Code konnte nicht meinen Zweck erfüllen. – abhi1610

+0

Wie @EdChum sagte, bitte probiere etwas aus und poste es hier, wir werden dich durch führen. –

Antwort

0

Sie StringIO nutzen könnten, den Inhalt im Speicher zu halten und sie dann am Ende auf die gewünschte Datei schreiben.

from io import StringIO 
import csv 

filename = 'sample.csv' 
out_data = StringIO() 

# Read CSV data to memory 
with open(filename, 'r', newline='') as in_file: 
    writer = csv.writer(out_data) 
    for row in csv.reader(in_file): 
     writer.writerow(row) 

# Write intermediate data to file 
with open(filename, 'w', newline='') as out_file: 
    out_file.write(out_data.getvalue()) 

out_data.close()