2012-02-16 69 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

是什麼輸入文件是什麼樣子? – 2012-02-16 20:43:27

+0

對不起,這是我的第一個問題,我不知道如何縮進線。我知道我的代碼是關閉的:/ – emagdnim 2012-02-16 20:44:10

+0

編輯問題以添加信息,請勿將它置於註釋中。這個問題應該有所有需要回答的信息。 – Daenyth 2012-02-16 20:45:14

回答

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]這將創建一個新的1列數組,其中第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

以下是不適合初學者。考慮它只是衆多選擇之一(而不是最好的方式)。

您可以使用答案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)) 

注:預計在輸入準確5*m線,年產m輸出行。

fileinput.input()返回輸入行的迭代器,這裏是an explanation how the above code group the lines

Example

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

其中input.txt是:

a0 
b0 
c00 
d0 
e0 
a1 
b111 
c1 
d1 
e1 
a2 
b2 
c2 
d2 
e2