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