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

replacing all but first commas with blank value

我有一个这种格式的 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!

我尝试了替换功能,但它会将每个逗号转换为 space。我想知道是否有这样的事情可以跳过第一个逗号并将每个逗号(第一个逗号之后)替换为“”。这是我目前所拥有的:

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()

如果解决方案不遵循以下代码,我不介意,只要它产生所需的输出就可以了

提前致谢!

如果您已经使用 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!
>>> 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?'

这使用生成器而不是列表理解。它将行分成第一部分(包括第一个逗号),然后是该行的其余部分。根据您的需要,您可能需要 trim 第二部分以删除多余的 space。

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()

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