用空白值替换除第一个逗号以外的所有逗号

时间:2015-04-05 21:27:34

标签: python csv replace

我有这种格式的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()

我不介意解决方案是否不遵循以下代码,无论哪个好,只要它产生所需的输出

提前致谢!

4 个答案:

答案 0 :(得分: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!

答案 1 :(得分: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?'

答案 2 :(得分: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()

答案 3 :(得分:0)

检查第一个逗号的索引,然后使用循环替换,从index + 1开始