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

Удивительный !!! Это сработало, спасибо! –

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: недействительный синтаксис, любые идеи? Но когда я что-то делаю, для строки в читателе: печатать строку, кажется, компилировать –

+0

Извините, параметры должны быть списком. – AChampion

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

Проверьте индекс первой запятой, а затем использовать цикл, чтобы заменить, начиная с индекса + 1

Смежные вопросы