繁体   English   中英

将清单清单写入CSV列

[英]Write list of lists to csv row

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

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"

只需在其上调用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模块来创建列值。 但这在这里可能是矫kill过正。


*或使用__str__方法进入您想要的其他对象,但这很少值得这样做。

这是我的方法:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM