2016-07-03 6 views
0

eine Idee auf, wie Sie benötigen dieses Szenario in Python behandeln i Python-Version 3.5.2Python mehrzeilige Zeichenfolge in einer Spalte in csv rudern

bin mit und ich bin 2 Tage alt in Python Fähigkeiten.

Ich habe eine CSV-Datei mit einem mehrzeiligen Zeichenfolge in einer Spalte

Beispiel: Ich habe 3 Spalte und die dritte Spalte enthält mehrzeiligen Strings

was ich habe

column1  column2   column3 

AppZok | wendy1 | car one\n bike two\n jeep one 

enter image description here

Die dritte Spalte enthält Leerzeichen zwischen Auto '' und newlinechar zwischen auto eins \ nbike

Und unten ist was ich erwarte die Ausgabe zu sein.

, was ich brauche

AppZok wendy1 car  one 
AppZok wendy2 bike two 
AppZok wendy3 jeep one 

enter image description here

Dies ist Code, den ich jetzt habe und ich drucken nur die 3. Spalte. Ich weiß, das ist nicht der Weg sein kann, aber ich bin halte den Code zu aktualisieren, indem die Suche nach Antworten

import csv 
import re 
import string 

with open('data_post.csv','r') as csvfile: 
    lines =csv.reader(csvfile,delimiter=',') 
    out_file=open('multi_line_out.csv','w') 
    for x in lines : 
     #print (x[3]) 
     data_write=csv.writer(out_file,delimiter='\n') 
     #final_data=x[1] 
     data_write.writerow(x[2]) 

Und ich führe i bekommen ist

c 
a 
r 

o 
n 
e 
\ 
n 

b 
i 
k 
e 

t 
w 
o 
\ 
n 

j 
e 
e 
p 

o 
n 
e 

Jede Hilfe zu diesem Thema sehr

geschätzt
+0

Können Sie einen Code posten, an dem Sie gearbeitet haben? –

Antwort

0

Der folgende Beispielcode kann eine Zeile Ihrer CSV-Datei auf mehrere Zeilen erweitern.

line = ["AppZok", "wendy1", "car one\n bike two\n jeep one"] 

def expand_column(line, col): 
    new_rows = map(lambda p: p.strip().split(" "), line[col].split("\n")) 
    return map(lambda row: line[:col] + row + line[col+1:], new_rows) 

if __name__ == '__main__': 
    print(list(expand_column(line, 2))) 

ich von hier denken an Sie sollten in der Lage, es zu tun selbst :)

+0

Danke Michael für deine schnelle Antwort. Ich habe nur Ihren Code kopiert und testen Sie es und erhalten Sie diese msg C: \\ Daten> Python test.py lkv

+0

Ah. Sie verwenden Python3. Ich habe meine Antwort aktualisiert, um damit klarzukommen. Im Wesentlichen zwingt '' list'' python dazu, die map-Operation auszuführen und die Elemente in einer Liste zu sammeln. – mhoff

+0

Zunächst können Sie in Google nach "Python Lambda" suchen. Dies sollte einige grundlegende Tutorials aufzeigen. Ein "Lambda" ist nichts anderes als eine anonyme Funktion: Es braucht einige Parameter, berechnet etwas und gibt ein Ergebnis zurück. Im Falle von '' expand_columns'' beginnen Sie mit '' line [col] .split ("\ n") ''. Dies ist die Liste '[" Care One "," Bike Zwei "," Jeep One "]' '. 'map'' wendet eine Funktion auf jedes Element dieser Liste an. Hier streift er die umgebenden weißen Bereiche und spaltet die Schnur wieder auf. Von hier an nur Google, wenn dich etwas interessiert und bestimmte Fragen stellen :) – mhoff

0

Newline Zeichen in CSV sind gültige Zeichen, gibt es keine Escape-Sequenz für sie. Sie müssen diese wörtlichen \n Zeichenfolgen als Trennzeichen interpretieren. Teilen Sie dann die Werte und bauen Sie Ihre Zeilen aus.

import csv 
with open(inpath, 'r') as infile,\ 
    open(outpath, 'w', newline='') as outfile: 
    reader = csv.reader(infile, delimiter=',') 
    writer = csv.writer(outfile, delimiter=',') 
    for line in reader: 
     data = line[:-1] 
     for last in line[-1].split(r'\n '): 
      writer.writerow(data + last.split(' ')) 
Verwandte Themen