将列表列表写入csv行

时间:2013-08-16 19:44:11

标签: python python-3.3

如何将list1或list2中的每个列表打印为不包含“[]”的列?

import csv
def test():
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]]
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]]
    with open('doc.csv', 'w', newline='') as file:
        writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL)
        writer.writerow(list1)
        writer.writerow(list2)
if __name__ == '__main__':
    test()

这接近我想要的但是在字符串中有[]:

[1, 2, 3, 4],[3, 2, 5],[9, 3, 6, 8, 4]
[2, 2, 4, 4],[1, 9, 10],[2, 7, 7, 4, 5]

编辑:

我想:

"1, 2, 3, 4","3, 2, 5","9, 3, 6, 8, 4"
"2, 2, 4, 4","1, 9, 10","2, 7, 7, 4, 5"

2 个答案:

答案 0 :(得分:1)

只需在其上调用str即可打印一列。所以,如果你想做别的事情,你必须自己将每一列转换成一个字符串*(因为在字符串上调用str只返回字符串)。

在你的情况下,我们必须将外部列表的每个元素转换为我们想要的格式的字符串...这本身需要将每个内部列表的每个元素转换为字符串,以便我们可以以某种方式将它们连接起来。通常,在Python中,要对序列的每个元素执行某些操作,您可以调用map,或者编写一个理解,因此我将执行其中一个。

在您进行编辑之后,您似乎想要以逗号分隔的列和列中的逗号空格分隔值,但这样做是正常的,因为您希望自动引用这些列。这很容易。

要使用', '加入值,您只需在其上调用', '.join()即可。

def stringify_column_list(column_list):
    return ', '.join(str(value) for value in column_list)

奇怪的分隔符和引号,您已经知道如何处理writer。所以剩下的就是在每一列上调用我们的格式化函数:

writer.writerow(map(stringify_column_list, list1))
writer.writerow(map(stringify_column_list, list2))

您甚至可以考虑再次使用csv模块来创建列值。但这可能有点过头了。


*或者使用__str__方法进行其他对象可以做你想要的,但这很少值得做。

答案 1 :(得分:1)

我就是这样做的:

import csv

def nested_list_formatter(nested):
    return tuple(','.join(str(item) for item in sublist) for sublist in nested)

def test():
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]]
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]]
    with open('doc.csv', 'w', newline='') as file:
        writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL)
        writer.writerow(nested_list_formatter(list1))
        writer.writerow(nested_list_formatter(list2))

if __name__ == '__main__':
    test()

doc.csv的结果内容:

"1,2,3,4","3,2,5","9,3,6,8,4"
"2,2,4,4","1,9,10","2,7,7,4,5"