2016-12-09 6 views
-2

好ましくはこのようなものですが、人々が「古い道」と呼ぶものに変換されます。私は4つのリスト&の4つの列をヘッダーで取得しようとしています。csvを使用せずに列で.txtファイルを取得するにはどうすればよいですか?

これまで私が持っていたことは(私はPythonの文盲がPythonでなければならないと考えていました)。

古い方法:

print("  Student Report") 
print("First Last  DOB Rank") 
print("--------------------------------") 
ReadFile = open("mytext.txt","r") 

with ReadFile as f: 
    [line.split() for line in f] 

CSVウェイ:

import csv 
columns = [[] for _ in range(4)] # 4 columns expected 
with open('path', rb) as f: 
    reader = csv.reader(f, delimiter=' ') 
    for row in reader: 
     for i, col in enumerate(row): 
      columns[i].append(col) 

質問は4列の適切なリストに入れてどのように私はこれを取得します(以下、 "サンプルレポート" を参照してください)です。

ありがとうございました:)

約30人ほどの偽の学生がいます。

対象アウトカム

Sample Report: 

      Student Report 

First  Last  DOB  Rank 

-------------------------------------------- 

Coreena  Delisio 8/7/1988 Freshman 

William  Barnes  10/26/1987 Junior 

Joseph  Mahan  9/18/1987 Senior 

Susan  Bevly  9/13/1987 Senior 

End of Report 

私はすべての人のフィードバックや回答のおかげで、それを見つけました。

これは私をこの結果に導くコードです。

## Report's Title 

print("    Student Report") 

## List Headers 

F = ('First') 
L = ('Last') 
Birth = ('DOB') 
Grade = ('Rank') 
print('{:10} {:13} {:11} {:4}'.format(F, L, Birth, Grade)) 
print("--------------------------------------------") 
ReadFile = open("input_file.txt","r") 

## List of Lists Turned Into Columns 

for line in ReadFile: 
    list = line.split(',') 
    First = list[0] 
    Last = list[1] 
    DOB = list[2] 
    Rank = list[3] 
    print('{:10} {:10} {:14} {:10}'.format(First, Last, DOB, Rank)) ## Columns 

## 2 Added Blank Lines to Show Cleanliness 

print() 
print() 

## End of Report 

print('End of Report') 

ReadFile.close() 
+0

正確にはあなたの質問は次のようにして中央、右、左揃えで指定できます。 – MSeifert

+0

ファイルからデータを取り出す際に、4列のリストのうちの4列をヘッダーと共に並べるにはどうしたらいいですか? – Nerdy

+0

申し訳ありませんが、あなたのアプローチには何が問題なのですか?私は '' line in line(for line in line)] ''私にはかなり良いようです。 – MSeifert

答えて

0

私はそのパディングと場所、それはあなたが列を表すためにために正当化されますを定義しているときに文字列をプリントアウトすることができますここには専門家ではありません。

これを行う方法の例は、最初のような値に各文字列を割り当てることです:

for lines in open('mytxt.txt'): 
    first = lines.split()[0] 
    last = lines.split()[1] 
    DOB = lines.split()[2] 
    rank = lines.split()[3] 

次の最初の列に印刷することができますどのように多くの文字を定義しているときは、それらをプリントアウトすることができます(最高の作品浮動小数点数のため)、そしてどのように遠くでお互いの列されている:私は(それは同様にあなたのパディングになります)列ごとに20に印刷することができる文字を制限することを決定した

print('{:20} {:20} {:20} {:20}'.format(first, last, DOB, rank)) 

##center_justify --> print('{:^20}'.format(center)) 
##right_justify --> print('{:>20}'.format(right)) 
##left_justify --> print('{:<20}'.format(left)) 
+0

私はそれをリストを得るように見えることはできません。提供されている例に従って。 – Nerdy

+0

これを問題なく動かしましたか?これで何が問題でしたか? –

0

これは機能しますか?

padding = 5 
n_columns = 4 
columns = [['a','bc3','c','de'],['sadasd','sad','a','a'],['123123'],['123']] 
max_entry_widths = [max(len(entry) for entry in column) 
        for column in columns] 
column_widths = [width+padding for width in max_entry_widths] 
n_rows = max(len(column) for column in columns) 

row_str = ("{{: <{}}}" * n_columns).format(*column_widths) 

rows = [] 
for row in range(n_rows): 
    entries = [] 
    for col in range(n_columns): 
     try: 
      entries.append(columns[col][row]) 
     except IndexError: 
      entries.append("") 
    rows.append(row_str.format(*entries)) 

print('\n'.join(rows)) 

# a  sadasd  123123  123 
# bc3  sad 
# c  a 
# de  a 
+0

これは私があなたに感謝の意を表したいのですが、私は.txt @BallpointBenから引き出したデータから列を作成しようとしています。 – Nerdy

+0

Woops、私は間違った方向に行きました。 – BallpointBen

+0

笑少し混乱していた – Nerdy

関連する問題