Eu exportei um arquivo CSV de um banco de dados. Certos campos são pedaços de texto mais longos e podem conter novas linhas. Qual seria a maneira mais simples de remover somente as novas linhas deste arquivo que estão entre aspas duplas, mas preservando todas as outras?
Não me importo se ele usa uma linha de comando do Bash, um forro ou um script simples, desde que funcione.
Por exemplo,
"Value1", "Value2", "This is a longer piece
of text with
newlines in it.", "Value3"
"Value4", "Value5", "Another value", "value6"
As novas linhas dentro da parte mais longa do texto devem ser removidas, mas não a nova linha que separa as duas linhas.
Respostas:
7 para resposta № 1Em 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 para resposta № 2
Aqui está uma solução em Python:
import re
pattern = re.compile(r"".*?"", re.DOTALL)
print pattern.sub(lambda x: x.group().replace("n", ""), text)
Veja trabalhando on-line: ideone
2 para resposta № 3
Isso é muito simplista, mas pode funcionar para você:
# 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"