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).
Was Sie wollen, ist nicht klar. Bitte zeigen Sie die gewünschte Ausgabe an. – martineau
Gibt es sowieso was ich kann Header zu jeder der Spalten hinzufügen – KWood
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