移调号码表蟒蛇
我需要将数据写在下面蟒蛇,移调号码表蟒蛇
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())
with open ('yourfile') as fin:
lines = (line.split() for line in fin)
for row in zip(*lines):
print ' '.join(row)
>>> 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)
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))
有一点要记住的是,你不会免费获得很好的间距。即使你没有把原来的情况排除在外,也没有什么帮助,因为这是错误的。我通过使用制表符而不是空格来解决这个问题,因为所有的值和标题都是7个字符或更少......但通常,在这种情况下(只要在编辑器中使用8个字符的制表符查看它)这个技巧是行不通的。所以,如果你真正想要的是一个人们可读的表格,它具有很好的格式,而不是在人类可读和机器可读(这是CSV是什么)之间的妥协,这不是完整的答案。
不幸的是不得不保持我的答案很短 - 因为在手机上打字太可怕了。 +1为你平常的详细答案 – 2013-04-29 19:52:32
@JonClements:哇,你真的在电话上回答SO问题吗?用代码?我无法想象甚至认真尝试,更不用说给你一个像你这样有用的答案! – abarnert 2013-04-29 19:54:37
是啊 - 受虐狂,愚蠢或沉重的SO成瘾的迹象。他们没有一个很好的特征...:'( – 2013-04-29 19:58:14
我头上形成的解决方案大量使用了“zip”内建。你知道吗?如果没有,请检查出来。这是非常有用的。 – mgilson 2013-04-29 19:20:31