Python преобразовать строку в список по разделителю
Как в Python преобразовать строку в список по разделителю «,» Если внутри части строки есть запятая, то эта часть строки выделяется двойными кавычки Например, строку:
данные, «данные, внутри которых есть запятая», «в этих «»данных, есть и запятая»» и кавычки»
преобразовать в список:
['данные', '"данные, внутри которых есть запятая"', '"в этих ""данных, есть и запятая"" и кавычки"']
Отслеживать
задан 3 сен 2022 в 10:40
45 4 4 бронзовых знака
А кавычки точно сбалансированы ? т.е. не надо учитывать запятые после нечетного количества кавычек или как ? И кстати, какие подходы вы уже пробовали для решения
3 сен 2022 в 11:33
Пробовал так: re.split(‘, (?![\w\.\s]+»,)’, my_string) — это работает, если внутри части есть запятая, но нет кавычек
3 сен 2022 в 11:44
3 сен 2022 в 12:24
Двойные кавычки внутри строки должны быть преобразованы в одинарные?
4 сен 2022 в 7:14
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Если из текста убрать пробелы после разделяющих запятых, получится вполне себе формат csv «стандартного» диалекта.
import csv import io text = 'данные,"данные, внутри которых есть запятая","в этих ""данных, есть и запятая"" и кавычки"' with io.StringIO(text) as f: reader = csv.reader(f) for row in reader: print(row) break
['данные', 'данные, внутри которых есть запятая', 'в этих "данных, есть и запятая" и кавычки']
Отслеживать
ответ дан 3 сен 2022 в 16:29
10.8k 2 2 золотых знака 16 16 серебряных знаков 36 36 бронзовых знаков
Отличная идея делегировать разбор кавычек тому инструменту, который это умеет из коробки )
4 сен 2022 в 7:20
«Если из текста убрать пробелы после разделяющих запятых» — достаточно добавить параметр skipinitialspace=True, т.е. получилось так — reader = csv.reader(f, skipinitialspace=True). skipinitialspace — когда True, пробел сразу после разделителя игнорируется
1 окт 2022 в 13:41
Можно вот так вот попробовать:
result = [] data = 'данные', '"данные, внутри которых есть запятая"', '"в этих ""данных, есть и запятая"" и кавычки"' for d in data: if "," in d: sp = d.split(",") for s in sp: result.append(s) else: result.append(d) print(result)
Вывод:
[‘данные’, ‘»данные’, ‘ внутри которых есть запятая»‘, ‘»в этих «»данных’, ‘ есть и запятая»» и кавычки»‘]
Если брать в том виде, что у вас, то при присвоении текста в переменную это будет кортеж. И таким образом, ничего в коде не измениться, а всего лишь надо убрать скобки.
Отслеживать
ответ дан 3 сен 2022 в 12:34
716 2 2 серебряных знака 5 5 бронзовых знаков
Регулярное выражение , |» ищет в строке кавычки и разделители. Флаг quoted означает «в кавычках», его надо переворачивать каждый раз когда видим кавычку. Если флаг сброшен и нашлась запятая её координаты складываются в список разрезов — cuts . В начало списка вставлен разрез в начале строки, в конец списка добавляется конец строки. В списке разрезов чётное число элементов. Каждая последовательная пара элементов указывает кусок текста, который попадёт в ответ:
import re text = 'данные, "данные, внутри которых есть запятая", "в этих ""данных, есть и запятая"" и кавычки"' print(text) cuts = [0] quoted = False for m in re.finditer(', |"', text): if m.group(0) == '"': quoted = not quoted print('quote', m.span(), quoted) elif not quoted: cuts.extend(m.span()) print('unquoted comma', m.span()) cuts.append(len(text)) print("cuts", cuts) it = iter(cuts) for f, t in zip(it, it): print(f, t, text[f:t])
$ python parse.py данные, "данные, внутри которых есть запятая", "в этих ""данных, есть и запятая"" и кавычки" unquoted comma (6, 8) quote (8, 9) True quote (44, 45) False unquoted comma (45, 47) quote (47, 48) True quote (55, 56) False quote (56, 57) True quote (79, 80) False quote (80, 81) True quote (91, 92) False cuts [0, 6, 8, 45, 47, 92] 0 6 данные 8 45 "данные, внутри которых есть запятая" 47 92 "в этих ""данных, есть и запятая"" и кавычки"
Как добавить строку в список python
В Python в список можно добавить строку и любой другой элемент, не зависимо от его типа. Есть несколько способов:
names = ['John', 'Tom'] # Добавляем строку с помощью метода .append names.append('Mishel') print(names) # => ['John', 'Tom', 'Mishel'] # "Склеиваем" два списка, один из которых содержит строку, которую нужно добавить names + ['Jerry'] print(names) # => ['John', 'Tom', 'Mishel', 'Jerry']
Как преобразовать строку в список в PYTHON?
Поскольку вы очень редко отмечаете ответы как правильные, отвечать я вам не буду. И другим не советую.
Yura Khlyan @MAGistr_MTM
Где здесь строка [‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]? У вас список
Дмитрий Шицков, Где вы видите строку?

Amigun @Amigun Автор вопроса
Yura Khlyan, ВОТ ИМЕННО, ЭТО СПИСОК. НО СТРОКА
Типа, можно изобразить как:
x = ‘[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]’
Оттуда нельзя элементы вызвать, т.к. это строка.
А мне нужно превратить в список
Amigun, Это список строк.
Решения вопроса 1

Владимир Куц @fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Как преобразовать эту строку в список? Чтобы я мог вызывать элементы
например 2 элемент
>>> import json >>> str1 = "['Первое', 'Второе', 'Третье', 'Четвертое']" >>> json.loads(str1.replace("'", '"'))[1] 'Второе'
P.S. В оригинале у вас не совсем корректный список в строке — «Первое» не закрывается кавычкой.
[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]
Если это не «бага а фича» . — то нужны дополнительные шаги для приведения списка к корректному виду.
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Ответы на вопрос 3
Zotik204783 @Zotik204783
str = «[‘Первое’, ‘Второе’, ‘Третье’, ‘Четвертое’]»
lst = eval(str)
print(lst[1])
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
undisclosed @undisclosed
Если у вас именно строка задается в таком виде: «[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]», то можно разделить ее по разделителю «, » и получить список элементов с кавычками в таком виде:
["['Первое", "'Второе'", "'Третье'", "'Четвертое']"]
А затем обрезать ненужные символы с обоих концов элемента с помощью метода strip().
В результате получим список из элементов, без лишних символов, к которым можно обращаться по номеру.
Все это делается одной строкой кода — list comprehension.
Пример кода:
string = "['Первое, 'Второе', 'Третье', 'Четвертое']" res = [element.strip("'[]") for element in string.split(", ")] print(res[1])
В ответ выдаст:
Второе
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Кодер-разнорабочий
Получить из строки элементы по заданному шаблону можно довольно просто используя регулярные выражения и встроенную в Python библиотеку re.
Для проверки своего регулярного выражения (с подсказками по их составлению) существует множество онлайн сервисов, достаточно погуглить.
Как строку в список python
С помощью конкатенации (сложения) тоже можно вставить нужный элемент в начало списка. Правда, для этого нужно, чтобы элемент был представлен в виде списка:
sp = [1, 2, 3] print([5] + sp)
Результат будет таким же, как и в первом способе:
[5, 1, 2, 3]
Способ 3: метод append
Этот метод по умолчанию расширяет существующий список, добавляя элемент в конец. Но ничто не мешает расширить список, состоящий из единственного элемента:
sp = [1, 2, 3] num = [5] num.append(sp) print(num)
Результат при использовании append() отличается – получится вложенный список:
[5, [1, 2, 3]]
Нужный элемент, однако, получает индекс 0 , так что цель достигнута. Кроме того, при решении некоторых задач может потребоваться создание именно вложенного списка, поэтому способ имеет право на жизнь.
Способ 4: метод extend
Метод extend() похож на append() – с той разницей, что он сохраняет «одномерность» списка:
sp = [1, 2, 3] num = [5] num.extend(sp) print(num)
Результат – обычный, не вложенный, список:
[5, 1, 2, 3]
Отметим, что одномерность сохранится даже в том случае, если элемент, который нужно поставить в начало списка, сам является списком, состоящим из нескольких элементов:
sp = [1, 2, 3] num = [5, 6, 7] num.extend(sp) print(num)
[5, 6, 7, 1, 2, 3]
4 способа добавления элемента в начало строки в Python
Строки в Python относятся к неизменяемому типу данных str , и представляют собой последовательности различных символов. Поскольку строки не изменяются, добавить элементы в начало последовательности можно только путем создания новой строки.
Способ 1: конкатенация
Строки в Python можно соединять (результатом будет новая строка). Рассмотрим на примере вставки знака + в начало строки, содержащей абстрактный мобильный номер:
el = '+' num = '91956612345' print(el + num)
Результатом операции станет новая строка:
+91956612345
Способ 2: использование f-строки
Вставить элемент в начало строки можно также с помощью f-строки:
el = '+' num = '91956612345' print(f'')
Результат будет аналогичным первому способу:
+91956612345
Способ 3: преобразование в список
Если нужно вставить элемент в определенную позицию строки, в том числе – в начало, можно последовательно воспользоваться преобразованием строки в список и объединением списка в строку с помощью метода join():
el = '+' num = list('91956612345') (num).insert(0, el) print(''.join(num))
Результат будет таким же:
+91956612345
Способ 4: использование rjust
Метод rjust() используется для выравнивания строки по правому краю. В качестве параметров он принимает длину новой строки и символ, которым будут заполнены пустые позиции. По умолчанию в качестве заполнителя используется пробел, но ничто не мешает выбрать знак + :
num = "91956612345" print(num.rjust(12, '+'))
В результате получится нужная строка, в начало которой вставлен необходимый символ:
+91956612345
Подведем итоги
Мы рассмотрели восемь простых и практичных способов добавления нужного элемента в начало списка и строки Python. Знаете какие-нибудь другие интересные способы вставки элементов? Поделитесь с нами в комментариях.
Материалы по теме
- Фундаментальные структуры данных: массивы и связанные списки с реализацией на Python
- Скрытые сокровища Python
- Трюки и советы по Python, которые облегчат вашу жизнь
