Как очистить строку для загрузки в массив в разделении Python?

1

У меня есть динамически созданный набор строк, разделенных ; Теперь я хочу преобразовать их в массив, как

st = "app; map; 'better tap'; nima;"

st_n = st.split(';')
print(st_n)

Это работает нормально до тех пор, пока есть только одно слово, как app но когда есть 'better tap' (которого я получаю много), оно заключает их в лишние "". Как я могу это исправить?

['app', 'map', '' лучше нажмите '', 'nima']

  • 2
    Каков ожидаемый результат? Если вы просто хотите удалить кавычки, используйте [word.strip("' ") for word in st.split(';')]
  • 0
    С самого начала вашего вопроса, похоже, это ваш собственный код, вызывающий эту проблему до того, что вы показали?
Показать ещё 1 комментарий
Теги:

2 ответа

6
Лучший ответ

Вы можете удалить "от лучшего крана до разделения":

st = "app; map; 'better tap'; nima;"

st_n = st.replace('\'', '').split(';')
print(st_n)

дает:

['app', 'map', 'better tap', 'nima', '']

  • 4
    Допустив там нет действительных ' символов в словах , которые должны быть сохранены. например, слово don't
  • 0
    @ HåkenLid Fair point
Показать ещё 4 комментария
3

один чистый способ - использовать модуль csv:

st = "app; map; 'better tap'; nima;"

import csv

tokens = next(csv.reader([st],delimiter=";",quotechar="'",skipinitialspace=True))

результат:

['app', 'map', 'better tap', 'nima', '']

(вы можете отфильтровать пустое поле в конце или st.strip(";") строку с помощью st.strip(";") если это проблема).

сильная сторона заключается в том, что она надежна для разграничения символов, если она заключена в кавычки. Изменить st как:

st = "app; map; 'better ; tap'; nima"

ты получишь

['app', 'map', 'better ; tap', 'nima']

Эта строка может быть проанализирована модулем csv должным образом благодаря skipinitialspace параметру skipinitialspace который допускает (и skipinitialspace) пространство после разделителя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню