2016-04-10 18 views
1

Belirli bir sütunu hizalamak için bir baskı bildirimi biçimlendirmeye çalışıyorum.Python - Belirli bir sütunu hizalamak için yazdırma biçimlendirme

anda benim çıktısı:

0 - Rusty Bucket (40L bucket - quite rusty) = $0.00 
1 - Golf Cart (Tesla powered 250 turbo) = $195.00* 
2 - Thermomix (TM-31) = $25.50* 
3 - AeroPress (Great coffee maker) = $5.00 
4 - Guitar (JTV-59) = $12.95 

aradığım çıktısı:

def list_items(): 
    count = 0 
    print("All items on file (* indicates item is currently out):") 
    for splitline in all_lines: 
     in_out = splitline[3] 
     dollar_sign = "= $" 
     daily_price = "{0:.2f}".format(float(splitline[2])) 
     if in_out == "out": 
      in_out = str("*") 
     else: 
      in_out = str("") 
     print(count, "- {} ({}) {}{}{}".format(splitline[0], splitline[1], dollar_sign, daily_price, in_out)) 
     count += 1 

: Burada

0 - Rusty Bucket (40L bucket - quite rusty) = $0.00 
1 - Golf Cart (Tesla powered 250 turbo)  = $195.00* 
2 - Thermomix (TM-31)       = $25.50* 
3 - AeroPress (Great coffee maker)    = $5.00 
4 - Guitar (JTV-59)       = $12.95 

Şu anda baskı için kullanıyorum kodudur Aşağıdaki gibi biçimlendirme kullanmayı denedim:

print(count, "- {:>5} ({:>5}) {:>5}{}{}".format(splitline[0], splitline[1], dollar_sign, daily_price, in_out)) 

ancak hizalanacak yalnızca bir sütunu elde edemedik. Herhangi bir yardım veya öneri çok takdir edilecektir! Ayrıca, python 3.x

Kullanmakta olduğum gibi, tüm bilgileri içermek için tuples kullanıyorum. all_lines ana liste gibi. Bilgiler orijinal olarak bir csv'den okunmaktadır. Öncelikle işlevsellik üzerinde çalışmaya çalışarak, korkunç isimlendirme kuralları için özür dileriz.

Bu başka bir yerde yanıtlanmış olsaydı; Bakmaya çalıştım.

DÜZENLEME:

Rusty Bucket,40L bucket - quite rusty,0.0,in 
Golf Cart,Tesla powered 250 turbo,195.0,out 
Thermomix,TM-31,25.5,out 
AeroPress,Great coffee maker,5.0,in 
Guitar,JTV-59,12.95,in 

cevap

0

: Bu konuda esneklik kazanabilir çünkü [DEĞİŞTİR] şimdi de bir tabloya dök versiyonunu dahil ettik

.

import csv 
from tabulate import tabulate 
open_file = open('items.csv', 'r+') 
all_lines = [] 
for line in open_file: 
    splitline = line.strip().split(',') 
    all_lines.append((splitline[0], splitline[1], splitline[2], splitline[3])) 

#print all_lines 
count = 0 
new_lines=[] 
for splitline in all_lines: 
    in_out = splitline[3] 
    dollar_sign = "= $" 
    daily_price = "{0:.2f}".format(float(splitline[2])) 
    if in_out == "out": 
     in_out = str("*") 
    else: 
     in_out = str("") 
    str2='('+splitline[1]+')'  
    print count, "- {:<30} {:<30} {}{:<30} {:<10}".format(splitline[0], str2, dollar_sign, daily_price, in_out) 
    new_lines.append([splitline[0], str2, dollar_sign, daily_price, in_out]) 
    count += 1 

print tabulate(new_lines, tablefmt="plain") 
print 
print tabulate(new_lines, tablefmt="plain", numalign="left") 
+0

Bu bir tedavi çalışmasıdır, merak ettiğim tek şey, her all_lines.append() öğesini belirtmeden bunu yapmanın bir yolu varsa. Fazladan satır ekleyecek bir programla çalıştığım için, ek içeriği görüntüleyebilmek için buna ihtiyacım var! Hızlı cevap için alkış! –

+0

Sadece all_line ifadesini kullandım çünkü verilerinizin nereden geldiğini ve nasıl göründüğünü bilmiyorum, bu yüzden eklediğiniz çıktıyı aldım ve ondan bir all_line oluşturdum. All_line'ınızın zaten ilk üç satırda oluşturduğum formatta olduğunu varsaydım. All_lines'larınızı daha ayrıntılı olarak belirtebilir misiniz? İlk üç hattımı atlayıp all_lines kullanmanı mı denedin? – tfv

+0

şüphesiz, benim all_lines anda şöyle görünür: open_file = open ('items.csv', 'r +') all_lines = [] open_file kuyruk için:. splitline = line.strip() bölünmüş ('' all_lines.append ((bölünmüş [0], bölme çizgisi [1], bölme çizgisi [2], bölme çizgisi [3])) Bilgileri bir csv dosyasından çekiyorum. –

0

Sen str.ljust(width[, fillchar]) bakmak gerekir:

> '(TM-31)'.ljust(15) 
'(TM-31)  ' # pad to width 

İşte csv dosyası bilgileri benim all_lines burada

import csv 
open_file = open('items.csv', 'r+') 
all_lines = [] 
for line in open_file: 
    splitline = line.strip().split(',') 
    all_lines.append((splitline[0], splitline[1], splitline[2], splitline[3])) 

Ve kullanılarak kod im olduğunu Sonra değişken uzunluktaki {} ({}) parçasını çıkartın ve gerekli genişliğe getirin. . Eğer olabilir arıyorsun

0

Baskı formatını kontrol etme fikrini kendim sevmiyorum. Bu durumda, Tabulate gibi bir tablo kütüphanesinden yararlanırdım.

iki temel noktalar şunlardır:

  1. bir tablo verileri tutmak (listede örneğin liste)
  2. tablefmt param ile uygun baskı biçimi seçin.
İlgili konular