Заключение блока текста в кавычки (или любую другую пару символов) в csv

У меня есть файл .csv, и мне нужно сделать следующее: для каждая строка, начиная с конец строки, текст, который встречается после определенного количества вхождений указанного символа, должен быть заключен в кавычки.

Я постараюсь объясниться на примере. Рассмотрим следующую строку csv:

gentlemen, this is a block of text. Thanks!,1,0,0,1

Я хочу заключить в кавычки часть строки, которая идет, начиная с конца, после четвертого появления запятой. Итак, должно получиться:

"gentlemen, this is a block of text. Thanks!",1,0,0,1

Я хотел бы сделать это в bash, чистом питоне или пандах.

Это легко в чистом питоне. Просто выполните цикл с конца списка до тех пор, пока не будет выполнено ваше условие, отслеживая индекс. Остальное только нарезка. Вы можете понять это!

Mike 28.05.2019 19:09

Этот вопрос, вероятно, на самом деле должен был быть помечен как дубликат; это не может быть первый вопрос, который нужно задать: «Как мне сопоставить X в строке [до|после] Y числа Z, [вперед|назад]». Кроме того, можно обойтись циклами, пока вы не обнаружите регулярные выражения, а затем поймете, что регулярные выражения являются ожидаемой частью набора инструментов программиста. Текст на кнопке вниз: «Этот вопрос не показывает каких-либо исследований: он неясен или бесполезен». Это не оскорбление. Задавать хорошие вопросы SO сложно. 99% пользователей действительно должны были просто погуглить.

Mike 30.05.2019 16:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
37
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

С СЭД:

$ sed -E 's/(.*)((,.*){4})/"\1"\2/' <<< 'gentlemen, this is a block of text. Thanks!,1,0,0,1'
"gentlemen, this is a block of text. Thanks!",1,0,0,1

При этом используются две группы захвата. Важная часть (,.*){4}: это четыре экземпляра запятой, за которой следует что-либо. Поскольку первая группа соответствует жадно, вторая группа будет соответствовать последним четырем запятым в строке.

Затем замена заключает в двойные кавычки первую группу и печатает вторую группу без изменений.

Ответ принят как подходящий

В питоне:

line = r'gentlemen, this is a block of text. Thanks!,1,0,0,1'
num_commas = 4
comma_count = 0
for c in reversed(line):
    from_end += 1
    if c == ',':
        comma_count += 1
    if comma_count >= num_commas:
        break
line[:-from_end]
# 'gentlemen, this is a block of text. Thanks!'

Остальное академично.

In [1]: line = r'gentlemen, this is a block of text. Thanks!,1,0,0,1'
   ...: a,b,c,d,*e = line[::-1].split(",")
   ...: print((','.join([a,b,c,d])[::-1] + "," + "'" + ','.join(e) + "'")[::-1])
   ...: 
'gentlemen, this is a block of text. Thanks!',1,0,0,1

Другие вопросы по теме