确定。我有一个CSV,我试图使用格式功能重新排列列数据的打印顺序。
换句话说,我如何使用格式函数以e,d,c的顺序打印列而不是默认的c,d,e?
这是我到目前为止所拥有的:
for row in books:
print [item.upper() for item in row]
print [format(item[])
我在这里缺少什么?
答案 0 :(得分:2)
如果要更改列的顺序,可以执行以下操作:
for row in books:
print list(reversed(row)) # Prints the reversed row, as a list
print ', '.join(reversed(row)) # Prints a single string of comma-separated values
print [row[index] for index in (2, 0, 1)] # General order change
print ', '.join(row[index] for index in (2, 0, 1)) # Same thing, but prints a string
答案 1 :(得分:2)
我不确定您要求的是什么,但这可能符合您的需求:
>>> my_items = ['c', 'd', 'e']
>>> print '{2} {1} {0}'.format(*my_items)
e d c
它使用格式化,允许您以任何您喜欢的顺序打印项目。有关详情,请参阅documentation of format()
。
如果您只想数组的逆序,只需在列表名称后的括号内为“step”部分提供-1
:
>>> my_items = ['c', 'd', 'e']
>>> my_items[::-1]
['e', 'd', 'c']
因此您的代码可能如下所示:
for row in books:
print [item.upper() for item in row[::-1]]
将打印一行中的大写项目列表,但顺序相反。
答案 2 :(得分:1)
从输入数据中隔离列顺序对DictWriter
很有用。
>>> data = [range(i, i+3) for i in range(5)]
>>> import csv, StringIO
>>> f = StringIO.StringIO()
使用您需要的顺序创建编写器。
>>> writer = csv.DictWriter(f, ('e', 'd', 'c'))
并创建一些方法来制作具有这些键的dict,无论您的输入是什么。
>>> def datamap(row):
... return dict(zip('cde', row))
...
然后就像正常使用csv编写器一样。 (writeheader()
只是一个方便,所以我们可以看到列的样子,这绝不是强制性的)
>>> writer.writeheader()
>>> for datum in data:
... writer.writerow(datamap(datum))
...
>>> print f.getvalue()
e,d,c
2,1,0
3,2,1
4,3,2
5,4,3
6,5,4
>>>