Добавление запятых в строку в python, но в notepad строка содержит три кавычки вокруг нее

#python #python-3.x #pandas

Вопрос:

Я запускаю этот код ниже и выводю результаты в csv-файл:

 df['Post Town'] = '"'   df['Post Town'].astype(str)   '"'
df.to_csv('filename.csv', index=False)
 

Однако я заметил, что в notepad мои строки возвращаются с тройными кавычками. Есть ли способ обойти это, поскольку мне нужны только двойные кавычки ASCII?

Желанный: "string"

Текущий: """string"""

Комментарии:

1. Вы пробовали не добавлять лишние кавычки df['Post Town'].astype(str) ?

Ответ №1:

to_csv() вставляет необходимые двойные кавычки вокруг вашего поля уже, но так как поле содержит двойные кавычки (вы вставляете их вручную), их необходимо экранировать.

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

Итак, «ваши» двойные кавычки экранируются двойными двойными кавычками, а затем вокруг поля помещается еще одна пара двойных кавычек to_csv() . И поскольку вы ставите «свои» двойные кавычки в начале и в конце поля, вы получите тройные двойные кавычки.

Решения:

  • Если вы хотите, чтобы процесс чтения CSV создавал строку с одинарными двойными кавычками вокруг нее: тройные двойные кавычки верны.
  • Если вы хотите, чтобы процесс чтения CSV создавал строку без кавычек вокруг нее: позвольте to_csv() обрабатывать внешние кавычки вокруг поля.
  • Если вам нужен другой вариант формата CSV (вариантов много), вам нужно отредактировать параметры to_csv() .

Комментарии:

1. Да, вы правы, однако моя проблема заключалась в том, как я создавал CSV. Но, добавив следующее ( quotechar='"', sep=',', quoting=csv.QUOTE_NONNUMERIC ) При создании CSV. Спасибо!

2. @MizanurChoudhury Хорошо, я добавил третье решение, чтобы отразить вашу ситуацию 🙂

Ответ №2:

Попробуйте изменить

 df['Post Town'] = '"'   df['Post Town'].astype(str)   '"'
 

Для

 df['Post Town'] = df['Post Town'].astype(str)