2015-04-05 52 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