2017-02-04 3 views
0

Ich bin ziemlich neu in Python und machte etwas, das diese Ausgabe hatte: (Der Text in einer CSV-Datei ist so so: 1, A 2, B 3, C usw.)Formatierung der Ausgabe von CSV-Daten?

Number  Letter 

1    A 
2    B 
3    C 
26   Z 

Leider verbrachte ich eine gute Zeit, es mit einem komplizierten Verfahren, bei dem ich machte Räume wie dies von Hand gemacht: Aktualisiert-Code rn

fx = int(input('Number?\n')) 
f=open('nums.txt','r') 
lines=f.readlines() 
line = lines[fx - 1] 
with open('nums.txt','r') as f: 
    for i, line in enumerate(f): 
     if i >= 5: 
      break 
     NUM, LTR, SMB = line.rsplit(',', 1) 
     print(NUM.ljust(13) + LTR.ljust(13) + SMB) 

Wie bekomme ich es 3 c machen Säulen? Gerade jetzt kommt es mit einem

ValueError: not enough values to unpack (expected 3, got 2) 

So gibt es eine einfachere Methode, dies zu erreichen, die nicht die Saiten nicht bewegen wie folgt aus:

Number  Letter 

1    A 
2    B 
3    C 
26    Z #< string moves with spaces. 
+1

Verwendung 'format' ... –

+0

Wenn Sie suchen fester Breite Spalten, finden Sie nicht nur, wie etwas wollen' '{: <13} {: <13}'. Format (26 , 'Z') ' – jonrsharpe

Antwort

2

Für einfache Ausrichtung, können Sie Verwenden Sie ljust oder rjust. Es gibt auch keine Notwendigkeit, die gesamte Datei für jede Zeile, die Sie bearbeiten möchten, zu lesen:

with open('numberletter','r') as f: 
    for i, line in enumerate(f): 
     if i >= 5: 
      break 
     number, letter = line.rsplit(',', 1) 
     print(number.ljust(13) + letter) 

Für komplexere Ausgabeformatierung, Blick auf str.format() und die formatting syntax

+0

Was wäre, wenn ich zum Beispiel 3 Spalten haben möchte: Zahlen Buchstaben Symbole – Yaya

+0

Sie würden' ljust' auch auf die zweite Spalte anwenden. Oder besser, verwenden Sie einfach 'rjust' in jeder Spalte. Die richtige Ausrichtung sieht in den meisten Fällen sowieso besser aus ;-) – schwobaseggl

+0

Also wäre es einfach 'NUM, LTR, SMB = line.rsplit (',', 1)' 'drucken (NUM.ljust (13) + LTR. ljust (13) + SMB) ' – Yaya

-1

Sie sys Modul dafür verwenden können.

import sys 
a=[1,"A"] 
sys.stdout.write("%-6s %-50s " % (a[0],a[1])) 
+1

Was hat das mit 'sys' zu tun, abgesehen davon, dass du zufällig in' sys.stdout' schreiben kannst? Der Grund, warum dies funktioniert, hat nichts mit 'sys' und allem mit dem (veralteten) String-Formatierungsoperator'% 'zu tun. – L3viathan

+0

@ L3viathan Ich denke, er hat sys drin, weil die Druckfunktion weiterhin neue Zeilen nach jeder Ausgabe druckt und ich die Ausgabe ohne Zeilenumbrüche angefordert habe. – Yaya

+0

@Yaya 'print (s, end = '')' macht das gleiche mit weniger Aufwand – schwobaseggl