2017-10-09 163 views
0

因此,我想打開一個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

您需要反轉的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() 
0

只需要另一個連接而不是map。 (不要有數據集進行確認,但我認爲這是您遇到的問題。)

包括一些清理:

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

更換lambda x: str(x)lambda x: ', '.join(x)