我有这种格式的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()
我不介意解决方案是否不遵循以下代码,无论哪个好,只要它产生所需的输出
提前致谢!
答案 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开始