我需要在python中编写下面的数据,
student score
Bill 43
Suzy 54
Sally 41
但是我必须把它翻转看起来像
student Bill Suzy Sally
score 43 54 41
我已经写了这个,
ofile = open('grades','r')
Tfile = open('Tgrades','u')
date = []
while 1:
a = ofile.readline()
if a=='':
break
data.append(a.split())
答案 0 :(得分:3)
with open ('yourfile') as fin:
lines = (line.split() for line in fin)
for row in zip(*lines):
print ' '.join(row)
答案 1 :(得分:3)
Jon Clements的回答显示了如何在数据转换后如何转置数据。
您可能还想考虑使用csv
模块来首先读取数据,并且绝对应该关闭文件。
import csv
with open('grades') as fin:
rows = csv.reader(fin, delimiter=' ', skipinitialspace=True)
transposed = zip(*rows)
with open('tgrades', 'w') as fout:
w = csv.writer(fout, delimiter='\t')
w.writerows(transposed)
一旦你理解了每一行的作用,你就可以更加简洁:
import csv
with open('grades') as fin, open('tgrades', 'w') as fout:
rows = csv.reader(fin, delimiter=' ', skipinitialspace=True)
csv.writer(fout, delimiter='\t').writerows(zip(*rows))
要记住的一件事是,你不会免费得到漂亮的间距。即使你没有扔掉原始情况下排列的所有间距,也没有用,因为这是错误的数量。我通过使用制表符而不是空格来解决这个问题,在这种情况下工作(只要你在带有8个字符制表符的编辑器中查看它),因为你的所有值和标题都是7个字符或更少......但一般来说,这个把戏不行。所以,如果你真正想要的是一个具有良好格式的人类可读表格,而不是人类可读和机器可读之间的妥协(这就是CSV),这不是完整的答案。
答案 2 :(得分:0)
>>> student =('Billy','Suzy','Sally')
>>> score=(43,54,41)
>>> (student,score)
(('Billy', 'Suzy', 'Sally'), (43, 54, 41))
>>> flipped = zip(*(student,score))
>>> flipped
[('Billy', 43), ('Suzy', 54), ('Sally', 41)]
>>> zip(*flipped)
[('Billy', 'Suzy', 'Sally'), (43, 54, 41)]
您可以使用zip(*matrix)