所以我想打开一个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
任何方式这样做?只是删除列表?
谢谢!
答案 0 :(得分:0)
您需要反转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()
答案 1 :(得分:0)
只需要另一个联接而不是map
。 (没有数据集可以确认,但我认为这是你遇到的问题。)
包括一点清理:
rows = [", ".join(row) for row in sorted(accum, key=sortKey)]
with open(FOUT,'w') as g:
g.write(''.join('\n'.join(rows)))
答案 2 :(得分:0)
将lambda x: str(x)
替换为lambda x: ', '.join(x)