2017-03-08 2 views
0

Ich habe eine CSV-Datei mit Zeilen, jede Zeile beginnt mit (@) und alle Felder innerhalb einer Zeile sind getrennt mit (;). Eines der Felder, das "Text" ("" [] "") enthält, weist einige Zeilenumbrüche auf, die Fehler beim Importieren der gesamten CSV-Datei in Excel oder Zugriff verursachen. Der Text nach den Zeilenumbrüchen wird als unabhängige Zeilen betrachtet, die nicht der Struktur der Tabelle folgen.Entfernen von Zeilenumbrüchen in einer CSV-Datei

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! 
la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. 
+info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

Hilfe mit einem Python-Skript? oder jede andere Lösung ...

als Ausgang würde Ich mag die Linien haben:

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. +info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

jede mögliche Hilfe? Ich eine CSV-Datei (54MB) mit vielen Zeilen mit Zeilenumbrüchen ... einige andere Zeilen sind in Ordnung ...

+0

und auch das @ innerhalb des Kommentars ist nicht zu berücksichtigen, ist es? –

+0

Ich möchte alle Linien wie die zweite Zeile des Beispiels strukturiert haben (@ 624914422 ...) – luisec

+1

Haben Sie irgendwas versucht? Scheint so, als ob es einen ziemlich einfachen Weg gibt, um anzufangen. Lies es zeilenweise und verwerfe das '@' und spalte es durch ';' oder benutze das csv Modul. –

Antwort

0

Sie sollten Ihre erwartete Ausgabe auch teilen.

Wie auch immer, ich schlage vor, Sie zuerst Ihre Datei zu bereinigen, um die Newline-Zeichen zu entfernen. Dann kannst du es als CSV lesen. Eine Lösung kann sein (ich glaube, jemand etwas besser :-) vorschlagen)

Reinigen Sie die Datei (unter Linux):

sed ':a;N;$!ba;s/\n/ /g' input_file | sed "s/ @/\[email protected]/g" > output_file 

lesen Datei als csv (Sie können es lesen jede Verwendung andere Methode)

import pandas as pd 
df = pd.read_csv('output_file', delimiter=';', header=None) 
df.to_csv('your_csv_file_name', index=False) 

Mal sehen, ob es Ihnen :-)

+0

Danke @PaulRooney – Pintu

+0

Arbeiten mit Windows – luisec

0

hilft Ihnen, l suchen ies, denen eine Zeile folgt, die nicht mit "@" beginnt, wie diese \r?\n+([email protected]\d+;).

Folgendes wurde von diesem Regex101 demo generiert. Es ersetzt solche Zeilenenden durch ein Leerzeichen. Sie können das ändern, was auch immer Sie mögen.

# coding=utf8 
# the above tag defines encoding for this document and is for Python 2.x compatibility 

import re 

regex = r"\r?\n+([email protected]\d+;)" 

test_str = ("@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; \"\"[OJO!\n" 
    "la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras.\n" 
    "+info: co/plHcfSIfn8]\"\"; 0\n" 
    "@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; \"\"[Porque nunca dejamos de amar]\"\"; 0") 

subst = " " 

# You can manually specify the number of replacements by changing the 4th argument 
result = re.sub(regex, subst, test_str, 0, re.MULTILINE) 

if result: 
    print (result) 

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution. 
+0

Es funktioniert nicht, die Demo fügt einige Zeichen in die echte Textzeile beim Erstellen des Codes ... – luisec

+0

@luisec Ich verstehe nicht, was das bedeutet? Wenn es nur bedeutet, dass es ein Leerzeichen hinzufügt, liegt das an 'subst =" "', Sie können das in "" ändern, oder was auch immer Sie möchten, indem Sie es durch –

+0

ersetzen. In der ersten Zeile nach dem Text "OJO!" die Demo fügt "\ n" hinzu, wenn der Code mit dem Beispiel exportiert wird (aus der Demo habe ich es bereits ausprobiert) ... die ursprüngliche Zeile enthält diese Zeichen nicht, um zu erkennen, wo die Zeilenumbrüche sind ... – luisec

Verwandte Themen