1

如何将 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"
4

2 回答 2

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__,但这很少值得这样做。

于 2013-08-16T19:55:45.280 回答
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"
于 2013-08-16T20:27:25.750 回答