2015-04-05 69 views
0

更換所有,但第一個逗號我有一個CSV格式爲:空白值

A, Hello, my name is John, how are you? 
B, Hello John, I'm doing well, thanks! 

眼下,CSV顯示了第一和第二進入四個值,因爲它們都是由逗號分隔。我的目標是讓CSV顯示兩個值,像這樣每個條目:

A, Hello my name is John how are you? 
B, Hello John I'm doing well thanks! 

我試圖替換功能,但是,每一個逗號轉換成空間。我想知道是否有這樣的事情,我可以跳過第一個逗號,並且每個逗號(在第一個之後)都替換爲「」。這是我到目前爲止有:

fin = open ('example.csv', 'r+') 
fout = open ('newExample.csv', 'w') 
reader = csv.reader(fin) 
for line in reader: 

    for i in range(1, len(line)): 
     line[i].replace(',', ''); 
     fout.write(line);  

fin.close() 
fout.close() 

如果因爲它產生所需的輸出

預先感謝解決方案不遵循下面的代碼,無論是好的,只要我不介意!

回答

1
>>> line = 'A, Hello, my name is John, how are you?' 
>>> head, tail = line.split(',', 1) 
>>> head 
'A' 

>>> tail 
'Hello, my name is John, how are you?' 

>>> tail.replace(',', ' ') 
'Hello my name is John how are you?' 

>>> ','.join([head, tail.replace(',', ' ')])) 
'A, Hello my name is John how are you?' 
+0

太棒了!這工作,非常感謝! – 2015-04-05 21:54:52

2

鑑於你已經使用CSV已經分裂域,那麼你可以通過參加第一場分離的「」有剩餘的字段,如:

from io import StringIO 
fin = StringIO("""A, Hello, my name is John, how are you? 
B, Hello John, I'm doing well, thanks!""") 

import csv 
reader = csv.reader(fin) 
for line in reader: 
    print(','.join([line[0], "".join(line[1:])])) 

輸出:

A, Hello my name is John how are you? 
B, Hello John I'm doing well thanks! 
+0

所以我已經複製粘貼此,但由於某種原因,我得到這個errror開始:文件「writecsv.py」,第8行 fin.close() ^ SyntaxError:語法無效,有什麼想法?但是當我做一些類似的事情時,對於閱讀器中的行:print line,似乎編譯 – 2015-04-05 21:42:14

+0

對不起,參數需要是一個列表。 – AChampion 2015-04-05 23:23:48

0

這使用生成器而不是列表理解。它將行分成第一部分(包括第一個逗號)和行的其餘部分。根據您的需要,您可能需要修剪第二部分以去除多餘的空間。

fin = open('example.csv', 'r+') 
reader = csv.reader(fin) 
open('newExample2.csv', 'w') 

with fout: 
    (fout.write(line[:line.find(',') + 1] 
       + line[line.find(','):].replace(',', "")) 
    for line in reader) 

fin.close() 
0

檢查第一個逗號的索引,然後使用一個循環來替代,從index + 1