将列表列表转换为垂直字符串

2024-10-01 09:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想打开一个CSV文件,对其排序,然后创建一个新文件,并将排序后的值放入一个新的CSV文件中。我成功地完成了前两个步骤,但将CSV文件放回新文件是我遇到的问题。你知道吗

 g = open(FOUT,'w')
 newcsv = sorted(accum, key = sortKey)
 g.write(''.join('\n'.join(map((lambda x: str(x), newcsv)))))
 g.close()

这只起部分作用,因为我的newcsv实际上是一个列表列表,这意味着我得到

[3.0, 12.0, 11.0, 17.0]
[5.0, 6.0, 17.0, 30.0]
[1.0, 10.0, 100.0, -40.0]

我想要的是:

3.0, 12.0, 11.0, 17.0
5.0, 6.0, 17.0, 30.0
1.0, 10.0, 100.0, -40.0

有什么办法吗?只是删除列表?你知道吗

谢谢!你知道吗


Tags: 文件csvkeymap列表排序步骤open
3条回答

您需要反转join的顺序

In [22]: l = [[3.0, 12.0, 11.0, 17.0],
    ...: [5.0, 6.0, 17.0, 30.0],
    ...: [1.0, 10.0, 100.0, -40.0]]

In [23]: l = [",".join(map(lambda x: str(x),i)) for i in l]

In [24]: l 
Out[24]: ['3.0,12.0,11.0,17.0', '5.0,6.0,17.0,30.0', '1.0,10.0,100.0,-40.0']

In [25]: '\n'.join(l) 
Out[25]: '3.0,12.0,11.0,17.0\n5.0,6.0,17.0,30.0\n1.0,10.0,100.0,-40.0'

因此,您的代码如下所示:

g = open(FOUT,'w')
newcsv = sorted(accum, key = sortKey)
g.write('\n'.join([",".join(map(lambda x: str(x),i)) for i in newcsv])
g.close()

您还可以重构到map(str,i),并且map将负责在列表的每个元素上调用str i

g = open(FOUT,'w')
newcsv = sorted(accum, key = sortKey)
g.write('\n'.join([",".join(map(str,i)) for i in newcsv])
g.close()

lambda x: ', '.join(x)替换lambda x: str(x)

只需要另一个连接而不是map。(没有要确认的数据集,但我认为这是您面临的问题。)

包括一些清理工作:

rows = [", ".join(row) for row in sorted(accum, key=sortKey)]
with open(FOUT,'w') as g:
    g.write(''.join('\n'.join(rows)))

相关问题 更多 >