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