2012-02-16 7 views
0

私は50行(各行に名前が付いています)のファイルを持っていますが、各行を取り出して読み込み、それを印刷したいのですが、列あたり5列10行の形式です。Pythonでファイルからテキストをフォーマットするにはどうすればよいですか?

それはこのような何か希望:

xxxxxは - XXXXX - XXXXX - XXXXX - XXXXX

xxxxxは - XXXXX - XXXXX - XXXXX - XXXXX

XXXXXを - XXXXX - XXXXX - XXXXX - XXXXX

xxxxxは - XXXXX - XXXXX - XXXXX - XXXXX

xxxxxは - XXXXX - XXXXX - XXXXX - xxxxx

これはこれまでのコードです。それはちょうど改行のそれぞれの行を読み取り、出力します。

f = open('file.txt', 'r') 
for x in f: 
    x = x.lstrip() 
    x = x.rstrip() 
    x = x.title() 
    print x 

x.lstripとx.rstipとx.title理由はテキストは、ファイル内のすべての奇妙なフォーマットされているので、私はそれをしなければなりません。これは割り当てのためのものです。ありがとう!

+0

入力ファイルを何に見えますか? –

+0

これは私の最初の質問です。行をインデントする方法を理解できませんでした。私は自分のコードが見えていることを知っていた:/ – emagdnim

+0

質問を編集して情報を追加し、コメントには入れないでください。質問はそれに答えるために必要なすべての情報を持っているはずです。 – Daenyth

答えて

1

何かがうまくいくかもしれない:

def print_table(lines, col_num, col_width): 
    for line_ix in range(0, len(lines), col_num): 
     print ' -- '.join([line.strip().ljust(col_width) for line in lines[line_ix:line_ix+col_num]]) 
0

ファイルタイプ.datを使用してからf = loadtxt( "file.dat") を使用すると、ファイルにすでに作成した列と行を使用してデータを配列に格納します。データファイルを少し編集する必要がありますが、確かにうまくいくでしょう。もしもあなたがこのようなコマンドを使うことができたら、

c = f [:、5]元のファイルの列5のすべてのデータを含む新しい列の列を作成します

0

これは何をしますか? (私はあなたが間違って必要としたものを解釈しているかもしれませんが)新しい出力の行ごとに表示されるファイルから5行、 ' - 'で区切られた各行が必要ですか?このような

f = open('file.txt', 'r') 
text = "" 
lines = [] 
counter = 0 

for line in f: 
    line = line.strip() 
    if counter % 5 == 0 and text > '': 
     counter = 0 
     lines.append(text) 
     text = '' 

    text += line + ' ' 
    counter += 1 


for line in lines: 
    vals = tuple(line.split()) 
    print('%s -- %s -- %s -- %s -- %s' % (vals)) 
0

次は、初心者には適していません。それを行うには、多くのオプションのうちの1つ(最も良い方法ではない)を考えてください。

あなたはWhat is the most “pythonic” way to iterate over a list in chunks?のための答えを使用して一度に5行を読むことができます:

#!/usr/bin/env python3 
import fileinput 

# read 5 lines at a time from stdin or file(s) at the command-line 
for row in zip(*[iter(fileinput.input())]*5): 
    print(' -- '.join("%-4s" % item.strip() for item in row)) 

注:それはm出力行を生成するための入力で正確に5*mラインを期待しています。

fileinput.input()は入力行に反復子を返します。ここにはan explanation how the above code group the linesがあります。 input.txtがある

Example

$ python reformat-input.py input.txt 
a0 -- b0 -- c00 -- d0 -- e0 
a1 -- b111 -- c1 -- d1 -- e1 
a2 -- b2 -- c2 -- d2 -- e2 

a0 
b0 
c00 
d0 
e0 
a1 
b111 
c1 
d1 
e1 
a2 
b2 
c2 
d2 
e2 
関連する問題