2016-04-13 20 views
1

Ich bin neu bei Python und ich habe mich entschieden, csv zu verwenden, und ich weiß nicht, wie man Header zu jeder meiner Spalten hinzufügt. Jede Hilfe würde sehr geschätzt werden.Wie füge ich Header zu meiner Liste hinzu (csv)

def Option_B(): 
import csv 
print("Estimate Number","Date","Customer_ID","Final_Total","Status","Amount_Paid") 
with open("paintingJobs.txt") as f: 
    reader = csv.reader(f, delimiter=',') 
    for columns in reader: 
     if "A" in columns and int(columns[5]) < int(columns[3]): 
      print (columns) 

Dies ist das Ergebnis i

title 1 title 2  3  4  5 6 
['E5345', '22/09/2015', 'C106', '815', 'A', '400'] 
['E5348', '23/09/2015', 'C109', '370', 'A', '200'] 
['E5349', '25/09/2015', 'C110', '480', 'A', '250'] 
['E5353', '28/09/2015', 'C114', '272', 'A', '200'] 
['E5355', '29/09/2015', 'C116', '530', 'A', '450'] 
['E5363', '01/10/2015', 'C124', '930', 'A', '500'] 
['E5364', '02/10/2015', 'C125', '915', 'A', '800'] 
['E5367', '03/10/2015', 'C128', '427', 'A', '350'] 
['E5373', '10/10/2015', 'C134', '1023', 'A', '550'] 
+1

Was Sie wollen, ist nicht klar. Bitte zeigen Sie die gewünschte Ausgabe an. – martineau

+0

Gibt es sowieso was ich kann Header zu jeder der Spalten hinzufügen – KWood

+0

Ich bin sicher, dass es. Wo sollen sie in Ihrer Ausgabe platziert werden? Bitte fügen Sie alle zusätzlichen Informationen _to your question_ hinzu. – martineau

Antwort

0

wollen würde, um zu tun, was Sie wollen erfordert zweimal die CSV-Datei, um alle Zeilen der Verarbeitung die maximale Breite der Elemente in jeder Spalte, um zu bestimmen, um die Spaltenüberschriften richtig zu rechtfertigen. Im folgenden Code wird die Datei zweimal gelesen. Es wäre natürlich schneller, die gesamte Datei in den Speicher zu schreiben, wenn sie nicht zu groß ist, weil die Platten-I/O viel langsamer ist als der Zugriff auf Daten, die sich bereits im Speicher befinden.

import csv 

FILE_NAME = "paintingJobs.txt" 
COL_HEADERS = ['title 1', 'title 2', '3', '4', '5', '6'] 
NUM_COLS = len(COL_HEADERS) 

# read file once to determine maximum width of data in columns 
with open(FILE_NAME) as f: 
    reader = csv.reader(f, delimiter=',') 
    # determine the maximum width of the data in each column 
    max_col_widths = [len(col_header) for col_header in COL_HEADERS] 
    for columns in reader: 
     if "A" in columns and int(columns[5]) < int(columns[3]): 
      for i, col in enumerate(columns): 
        max_col_widths[i] = max(max_col_widths[i], len(repr(col))) 
    # add 1 to each for commas 
    max_col_widths = [col_width+1 for col_width in max_col_widths] 

# read file second time to display its contents with the headers 
with open(FILE_NAME) as f: 
    reader = csv.reader(f, delimiter=',') 
    # display justified column headers 
    print(' ' + ' '.join(col_header.ljust(max_col_widths[i]) 
          for i, col_header in enumerate(COL_HEADERS))) 
    # display column data 
    for columns in reader: 
     if "A" in columns and int(columns[5]) < int(columns[3]): 
      print(columns) 

Ausgang:

title 1 title 2  3  4  5 6 
['E5345', '22/09/2015', 'C106', '815', 'A', '400'] 
['E5348', '23/09/2015', 'C109', '370', 'A', '200'] 
['E5349', '25/09/2015', 'C110', '480', 'A', '250'] 
['E5353', '28/09/2015', 'C114', '272', 'A', '200'] 
['E5355', '29/09/2015', 'C116', '530', 'A', '450'] 
['E5363', '01/10/2015', 'C124', '930', 'A', '500'] 
['E5364', '02/10/2015', 'C125', '915', 'A', '800'] 
['E5367', '03/10/2015', 'C128', '427', 'A', '350'] 
['E5373', '10/10/2015', 'C134', '1023', 'A', '550'] 

Hinweis: Für Portabilität, Lesen (und Schreiben) csv-Dateien mit dem csv Modul sollten für Betriebssysteme im Binär-Modus sein, der zwischen diesem und einem „Text unterscheiden "Modus wie Windows. Um eine Datei zum Lesen im Binärmodus in Python 2 zu öffnen, verwenden Sie open('filename', 'rb'), und verwenden Sie in Python 3 open('filename', 'r', newline=''). Öffnen von Dateien zum Schreiben erfolgt durch Ersetzen der r durch w.

Beachten Sie auch die Verwendung von len(repr(col)) bei der Berechnung der Breite jedes Elements in einer Spalte. Dies liegt daran, columns ist eine Liste und print(columns) zeigt die Darstellung von jedem Element in der Liste im Gegensatz zu nur seinen Wert (d. H. Für eine Zeichenfolge ist es der Unterschied zwischen 'E5345' und E5345 bekommen).

+0

Danke für die Hilfe. Sehr geschätzt. – KWood

Verwandte Themen