Можно ли использовать разные диалекты на разных полях? - PullRequest
1 голос
/ 12 сентября 2011

Я читаю CSV-файл с python, и для некоторых полей я хочу удалить escape-символ ('aaa/bb' до aaabb), а для некоторых полей оставить его без изменений.

например: input:13,0,0,"0",false,"test\\file",-1,-1,1314570610162,13,"1","Danny","name\\Mary"
ожидаемый вывод: 13,0,0,"0",false,"testfile",-1,-1,1314570610162,13 ,"1","Danny","name\Mary"

Это код, который я использую:

csv.register_dialect('mydialect', escapechar='\\')
dialect = csv.get_dialect('mydialect')
writer = csv.writer(sys.stdout, dialect=dialect)
writer.writerow
(
    (
        <row to write>
    )
)

Можно ли использовать несколько диалектов в одной строке?как?другая идея?

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Ты слишком обдумываешь это.Вам не нужно иметь несколько диалектов, они описывают макет csv .Вы хотите удалить символы в определенных полях, что легко сделать перед записью вывода.

Что-то вроде этого должно быть хорошо:

reader = csv.reader(yourFileHandle)
writer = csv.writer(outputFileHandle)
for row in reader:
    row[5] = row[5].replace(r'\','')
    writer.writerow(row)
0 голосов
/ 12 сентября 2011

Вам не нужно escapechar, если в кавычках нет QUOTE_NONE и doublequote - True (по умолчанию).

>>> import csv, sys
>>> w = csv.writer(sys.stdout)
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\'])
1,"""ab""","c,",d e,f,g\
>>> w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONE,escapechar='\\')
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\'])
1,\"ab\",c\,,d e,f,g\\
>>> w = csv.writer(sys.stdout, doublequote=False,escapechar='\\')
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\'])
1,\"ab\","c,",d e,f,"g\"
...