Как я могу удалить символы новой строки из всех цитируемых фрагментов текста в файле? - PullRequest
4 голосов
/ 22 ноября 2011

Я экспортировал файл CSV из базы данных.Некоторые поля представляют собой более длинные текстовые блоки и могут содержать символы новой строки.Какой самый простой способ удалить из этого файла только новые строки, которые находятся внутри двойных кавычек, но сохраняют все остальные?

Мне все равно, будет ли он использовать командную строку Bash на один слой или простой скрипт так долгокак это работает.

Например,

"Value1", "Value2", "This is a longer piece
    of text with
    newlines in it.", "Value3"
"Value4", "Value5", "Another value", "value6"

Новые строки внутри более длинного фрагмента текста должны быть удалены, но не новая строка, разделяющая две строки.

Ответы [ 3 ]

7 голосов
/ 22 ноября 2011

В Python:

import csv
with open("input.csv", "rb") as input, open("output.csv", "wb") as output:
    w = csv.writer(output)
    for record in csv.reader(input):
        w.writerow(tuple(s.remove("\n") for s in record))
7 голосов
/ 22 ноября 2011

Вот решение на Python:

import re
pattern = re.compile(r'".*?"', re.DOTALL)
print pattern.sub(lambda x: x.group().replace('\n', ''), text)

Посмотрите, как работает онлайн: ideone

2 голосов
/ 22 ноября 2011

Это очень упрощенно, но может работать для вас:

# cat <<\! | sed ':a;/"$/{P;D};N;s/\n//g;ba'                            
> "Value1", "Value2", "This is a longer piece
>     of text with
>     newlines in it.", "Value3"
> "Value4", "Value5", "Another value", "value6"
> !
"Value1", "Value2", "This is a longer piece    of text with    newlines in it.", "Value3"
"Value4", "Value5", "Another value", "value6"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...