[PYTHON] Einzeilige Verarbeitung des Schlammspeichers (CSV)

Ich hatte eine Aufzeichnung von dem, was ich im letzten Monat getan habe, aber ein Memo, als ich es tabellierte. Wie unten gezeigt, werden die Daten im CSV-Format aufgezeichnet und diese für jede Spalte aggregiert. (Auch wenn Sie eine Ahnung haben, indem Sie sich die Zahlen ansehen, gehen Sie diese bitte brillant durch.)

4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
6000,5000,7000,2000,20
4000,6000,6000,2000,20
1500,1500,2000,1000,20
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1

Der zu verarbeitende Liner ist wie folgt.

Einzeiler


python -c "import csv;print([sum([int(m) for m in materials]) for materials in zip(*csv.reader(open('big.txt')))])"

Gut verständlicher (vielleicht) Kommentar

Lesen Sie zuerst CSV. Geben Sie das Objekt für geöffnete Dateien an das Reader-Objekt des CSV-Moduls weiter. Da das Reader-Objekt iterierbar ist, kann es mit for gedreht werden.

>>> import csv
>>> for r in  csv.reader(open('big.txt')):
...     print(r)
...
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '3500', '6010', '6000', '20']
…

Verwenden Sie als Nächstes die Zip-Funktion, um die Werte für jede Spalte zu aggregieren. Das von der Zip-Funktion zurückgegebene Zip-Objekt ist ebenfalls iterierbar, sodass Sie es auf die gleiche Weise verwenden können. Es ist ersichtlich, dass die Werte für jede Spalte in Tupeln zusammengefasst sind.

>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
...     print(entry)
...
('4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '6000', '4000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('2000', '2000', '2000', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '2000', '2000', '2000', '2000', '2000', '5000', '6000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('5000', '5000', '5000', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '5210', '5210', '5210', '5210', '5210', '7000', '6000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000')
('7000', '7000', '7000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '5200', '5200', '5200', '5200', '5200', '2000', '2000', '1000', '1000', '1000', '1000', '1000', '1000', '1000', '1000')
('20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '1', '1', '1', '1', '1', '1', '1')

Verwenden Sie abschließend die Summenfunktion, um die Werte im Tupel zu summieren. Da der von csv.reader gelesene Wert jedoch eine Zeichenfolge ist, muss er in int konvertiert und dann an die Summenfunktion übergeben werden.

>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
...     print(sum([int(e) for e in entry]))
...
86000
67000
118130
107000
387

Recommended Posts

Einzeilige Verarbeitung des Schlammspeichers (CSV)
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Verschiedene Verarbeitung von Python
Parallele Verarbeitung mit Parallel von Scikit-Learn
Nachbearbeitung von Python (NG)
Einzeiliges Basisdiagramm von HoloViews