Wie kann ich Felder in einer CSV-Zeichenfolge mit Python zusammenführen?

Ich versuche, drei Felder in jeder Zeile einer CSV-Datei mit Python zu verschmelzen. Dies wäre einfach, außer einige der Felder sind von doppelten Anführungszeichen umgeben und beinhalten Kommas. Hier ist ein Beispiel:

,,Joe,Smith,New Haven,CT,"Moved from Portland, CT",,goo, 

Gibt es einen einfachen Algorithmus, der die Felder 7-9 für jede Zeile in diesem Format zusammenführen könnte? Nicht alle Zeilen enthalten Kommas in doppelten Anführungszeichen.

Vielen Dank.

4 Solutions collect form web for “Wie kann ich Felder in einer CSV-Zeichenfolge mit Python zusammenführen?”

Etwas wie das?

 import csv source= csv.reader( open("some file","rb") ) dest= csv.writer( open("another file","wb") ) for row in source: result= row[:6] + [ row[6]+row[7]+row[8] ] + row[9:] dest.writerow( result ) 

Beispiel

 >>> data=''',,Joe,Smith,New Haven,CT,"Moved from Portland, CT",,goo, ... '''.splitlines() >>> rdr= csv.reader( data ) >>> row= rdr.next() >>> row ['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CT', '', 'goo', '' ] >>> row[:6] + [ row[6]+row[7]+row[8] ] + row[9:] ['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CTgoo', ''] 

Sie können das csv-Modul verwenden, um das schwere Heben zu machen: http://docs.python.org/library/csv.html

Du hast nicht genau gesagt, wie du die Säulen zusammenführen wolltest. Vermutlich willst du nicht, dass dein verschmolzenes Feld "von Portland, CTgoo" verschoben wird. Der untenstehende Code erlaubt Ihnen, einen Trennstring (vielleicht ", " ) anzugeben und leere / leere Felder zu behandeln.

 [transcript of session] prompt>type merge.py import csv def merge_csv_cols(infile, outfile, startcol, numcols, sep=", "): reader = csv.reader(open(infile, "rb")) writer = csv.writer(open(outfile, "wb")) endcol = startcol + numcols for row in reader: merged = sep.join(x for x in row[startcol:endcol] if x.strip()) row[startcol:endcol] = [merged] writer.writerow(row) if __name__ == "__main__": import sys args = sys.argv[1:6] args[2:4] = map(int, args[2:4]) merge_csv_cols(*args) prompt>type input.csv 1,2,3,4,5,6,7,8,9,a,b,c 1,2,3,4,5,6,,,,a,b,c 1,2,3,4,5,6,7,8,,a,b,c 1,2,3,4,5,6,7,,9,a,b,c prompt>\python26\python merge.py input.csv output.csv 6 3 ", " prompt>type output.csv 1,2,3,4,5,6,"7, 8, 9",a,b,c 1,2,3,4,5,6,,a,b,c 1,2,3,4,5,6,"7, 8",a,b,c 1,2,3,4,5,6,"7, 9",a,b,c 

Es gibt ein eingebautes Modul in Python zum Analysieren von CSV-Dateien:

http://docs.python.org/library/csv.html

Du hast diese Frage als 'Datenbank' markiert. In der Tat, vielleicht wäre es einfacher, die beiden Dateien hochladen, um Tabellen der db (Sie können sqllite oder jede Python-SQL-Bibliothek, wie sqlalchemy) zu verwenden und dann verbinden sie.

Das würde dir einen gewissen Vorteil geben, dann würdest du in der Lage sein, eine SQL-Syntax zu verwenden, um die Tabellen abzufragen, und du kannst sie auf der Festplatte speichern, anstatt sie im Speicher zu halten, also denk daran … .)

  • Str in Pythons Karte und Summe
  • Überprüfen Sie, ob String in der exakten Form von "<int1>, <int2>" in Python
  • NameError: name 'book' ist nicht definiert [duplicate]
  • Extrahieren Sie bestimmte Zeichen aus der Zeichenfolge
  • Python - wie man eine "rohe" Zeichenfolge in eine normale Zeichenfolge umwandelt
  • Python behandeln Variable als Literal / Rohstring
  • Python konvertiert auf String und umgekehrt
  • Aufteilen einer variablen Länge String in mehrere Teile in Python
  • Wie finde ich heraus, ob ein Python-Objekt ein String ist?
  • Wie kann ich python itertools.groupby () verwenden, um eine Liste von Strings mit ihrem ersten Charakter zu gruppieren?
  • Name ist nicht definiert Fehler
  • Python ist die beste Programmiersprache der Welt.