Die Kombination von 2 .csv-Dateien, die durch gemeinsame Spalte
Habe ich zwei .csv-Dateien, in denen die erste Zeile in der Datei 1:
MPID,Title,Description,Model,Category ID,Category Description,Subcategory ID,Subcategory Description,Manufacturer ID,Manufacturer Description,URL,Manufacturer (Brand) URL,Image URL,AR Price,Price,Ship Price,Stock,Condition
Die erste Zeile von Datei 2:
Regular Price,Sale Price,Manufacturer Name,Model Number,Retailer Category,Buy URL,Product Name,Availability,Shipping Cost,Condition,MPID,Image URL,UPC,Description
und dann den rest jeder Datei gefüllt ist mit Informationen.
Wie Sie sehen können, die beiden Dateien über ein gemeinsames Feld genannt MPID (Datei 1: Spalte 1, Datei 2: Spalte 9, wobei der erste col ist die Spalte 1).
Ich möchte eine neue Datei zu erstellen, die Kombination dieser beiden Dateien suchen Sie in dieser Spalte (z.B.: wenn es eine MPID, die in beiden Dateien, dann in der neuen Datei diese MPID erscheint mit seinen beiden Zeile von Datei 1 und die Zeile aus Datei 2). WENN man MPID erscheint nur in einer Datei, dann sollte es auch gehen, in dieser gemeinsamen Datei.
Die Dateien sind nicht sortiert, in keiner Weise.
Wie mache ich das auf einem debian-Rechner, die entweder mit einem shell-Skript oder python?
Dank.
EDIT: Beide Dateien haben nicht Kommas, die andere als die Trennung der Felder.
- Für eine Pandabären-Lösung finden Sie unter stackoverflow.com/questions/53645882/pandas-merging-101
Du musst angemeldet sein, um einen Kommentar abzugeben.
one,"two,more two","three, ""more, still more three"""
enthält drei CSV-Spalten, die Ausstellung zitiert, Kommas und sogar zitiert Kommas innerhalb entgangen Zitate in der Dritten Spalte. (Verschiedene CSV-Dialekte mit unterschiedlichen Flucht-Mechanismen existieren auch.) Die einzig richtige Lösung ist die Verwendung eine tatsächliche CSV-parser, wie Python ' scsv
Modul.Dies ist das klassische "relationale join-problem".
Haben Sie mehrere algorithmen.
Verschachtelten Schleifen. Sie Lesen aus einer Datei zu Holen, eine "master" - Datensatz. Lesen Sie die gesamte andere Datei Auffinden aller "detail" - Datensätze, die mit dem master. Das ist eine schlechte Idee.
Sort-Merge. Sortieren Sie jede Datei in eine temporäre Kopie auf der Grundlage der gemeinsamen Schlüssel. Sie führen dann beide Dateien durch das Lesen von master-und dann Lesen alle übereinstimmenden Zeilen aus der detail und schreiben der zusammengeführten Datensätze.
Lookup. Lesen Sie eine der Dateien vollständig in ein Wörterbuch im Speicher, indiziert durch das key-Feld. Dies kann schwierig sein, für die detail-Datei, wo Sie haben mehrere Kinder pro Schlüssel. Dann liest du die andere Datei und Suche die passenden Datensätze in das Wörterbuch.
Dieser, sort-merge ist oft der Schnellste. Dies geschieht mit dem unix - Sortieren Befehl.
Lookup Umsetzung
dict
Objekt. Mit allendict
Methoden intakt.Müssen Sie Blick auf die
join
Befehl in der shell. Sie müssen auch die Daten zu Sortieren, und wahrscheinlich verlieren die ersten Zeilen. Der ganze Prozess wird fallen flach, wenn die Daten enthält Kommas. Oder Sie benötigen, um die Daten mit einer CSV-sensibler Prozess, stellt eine andere Feld-separator (vielleicht Ctrl-A), die Sie verwenden können, um die geteilten Felder eindeutig.Die alternative, mit Python, liest die beiden Dateien in ein paar Wörterbücher (keyed über die gemeinsame Spalte(s)) und dann eine Schleife verwenden, um alle Elemente in der kleineren der beiden Wörterbücher, die auf der Suche nach passenden Werte in die andere. (Dies ist die grundlegende nested-loop-Abfrage Bearbeitung).
Es scheint, dass Sie versuchen zu tun, in ein shell-Skript, welches im Allgemeinen durchgeführt unter Verwendung von SQL server. Ist es möglich, die Verwendung von SQL für die Aufgabe? Zum Beispiel, importieren Sie die beiden Dateien in mysql, erstellen Sie dann eine Verknüpfung erstellen, dann exportieren Sie Sie in CSV.
join
oder Awk, und/oder Sie ausführen müssen, die mehrere Verknüpfungen über die gleichen Daten.Könnten Sie werfen Sie einen Blick auf meine FOSS-Projekt CSVfix, das ist ein stream-editor zum Bearbeiten von CSV-Dateien. Es unterstützt joins, unter seinen anderen Funktionen, und erfordert kein scripting zu verwenden.
Für das Zusammenführen von mehreren Dateien (auch > 2) basierend auf ein oder mehrere gemeinsame Spalten, einer der besten und effizientesten Ansätze in python würde die "Brauerei". Sie konnte auch angeben, welche Felder berücksichtigt werden müssen, die für das Zusammenführen und welche Felder gespeichert werden müssen.
Erstellen Sie eine Liste aller Felder, und fügen Sie dem Dateinamen zum speichern von Informationen über die Herkunft der Datensätze.Gehen Sie durch Quell-Definitionen und sammeln Sie die Felder aus: