如何在Python中格式化文件中的文本?

时间:2012-02-16 20:34:44

标签: python formatting

我有一个有50行的文件(每行都有一个名字),我想把每一行读取,然后打印,但格式为每列有5列10行。

它想要这样的东西:

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的原因是因为文本在文件中的格式很奇怪所以我必须这样做。这是一项任务。谢谢!

4 个答案:

答案 0 :(得分: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]])

答案 1 :(得分:0)

您可以尝试使用文件类型.dat,然后f = loadtxt(“file.dat”) 这将使用您在文件中创建的列和行将数据放入数组中。您必须稍微编辑一下数据文件,但它肯定会起作用。如果你想更改东西,你可以使用这样的命令,

c = f [:,5]这将创建一个包含1列的新数组,其中包含原始文件中第5列的所有数据

答案 2 :(得分: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))

答案 3 :(得分: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