CSV писатель удваивает цитаты - PullRequest
1 голос
/ 09 июля 2019

У меня есть строка в Python: hello, my name is "Joe". Когда я пытаюсь писать с помощью модуля csv, я получаю "hello, my name is ""Joe""". То, что я надеюсь увидеть, это "hello, my name is "Joe"".

Есть ли способ, чтобы писатель CSV не добавлял двойные кавычки, когда присутствуют двойные кавычки?

код:

s = 'hello, my name is "Joe"'
with open(filename, 'w', newline='', encoding='utf-8') as f_out:
    writer = csv.writer(f_out)
    writer.writerow([s])

Ответы [ 4 ]

3 голосов
/ 09 июля 2019

Согласно RFC 4180 : «Если двойные кавычки используются для включения полей, то двойная кавычка, появляющаяся внутри поля, должна быть исключена, если перед ней стоит другая двойная кавычка».

Но если вы хотите изменить это в зависимости от ваших конкретных потребностей, попробуйте отключить двойные кавычки, и вы должны определить escape-символ:

import csv

s = ['hello, my name is "Joe"']
with open(filename, 'w', newline='', encoding='utf-8') as f_out:
    writer = csv.writer(f_out, doublequote=False, escapechar='\\')
    writer.writerow(s)

, выходной файл будет выглядеть так:

"hello, my name is \"Joe\""

Однако я рекомендую использовать параметр quotechar в csv.writer, чтобы изменить символ кавычки, как в другом ответе от @ AndrejKesely.

3 голосов
/ 09 июля 2019

Вы можете использовать параметр quotechar при создании csv.writer ( doc ):

import csv

s = 'hello, my name is "Joe"'
with open('out.csv', 'w', newline='', encoding='utf-8') as f_out:
    writer = csv.writer(f_out, quotechar="'")
    writer.writerow([s])

Вывод файла:

'hello, my name is "Joe"'
0 голосов
/ 09 июля 2019

Два решения:

Либо вы можете использовать quotechar для изменения символа кавычки, чтобы он игнорировал двойные кавычки, найденные в строке. csv.writer(f_out, quotechar="'") подойдет для вашего случая.

Или вы можете установить escapechar="\\" вместе с doublequote=False. Это будет ставить обратную косую черту перед каждой двойной кавычкой для экранирования в строке. csv.writer(f_out, escapechar="\\", doublequote=False)

Попробуйте оба из них. Я надеюсь, что это ответит на ваш вопрос.

0 голосов
/ 09 июля 2019
import csv

s = ['hello, my name is \"Joe\"']
filename = "C:/Users/myself/Documents/out.csv"
with open(filename, 'w', newline='', encoding='utf-8') as f_out:
    writer = csv.writer(f_out)
    writer.writerow(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...