使用格式化功能无法得到我想要的东西

时间:2011-11-25 16:46:04

标签: python csv

确定。我有一个CSV,我试图使用格式功能重新排列列数据的打印顺序。

换句话说,我如何使用格式函数以e,d,c的顺序打印列而不是默认的c,d,e?

这是我到目前为止所拥有的:

for row in books:


    print [item.upper() for item in row]

    print [format(item[])

我在这里缺少什么?

3 个答案:

答案 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

>>>