2016-04-25 6 views
2

Ich habe eine große csv-Datei, die eine erhebliche Menge an schmutzigen Daten enthält, ich möchte es ein wenig aufräumen, indem Sie alle entfernen Werte, die nicht unbedingt notwendig sind.schnelle, genaue, zuverlässige Möglichkeit, unerwünschte Werte aus einer CSV-Datei zu entfernen

Here ist die Datei, über die ich spreche.

Es hat die Komponenten:

Website,Title,Start Date,Employer,Location,lat,lon,Country,Skills11,Jobs

aber ich möchte alle auszulöschen, aber:

Employer,Location,Country,Jobs

Gibt es ein bestimmtes Werkzeug, das für das in einzigartiger Weise geeignet ist Aufgabe?

Oder hat jemand vielleicht ein praktisches Python-Skript, das den Job erledigt?

+4

Wenn es nur eine einmalige Sache ist, vielleicht könnten Sie es in Excel öffnen und diese Spalten löschen? – TigerhawkT3

+0

Ich habe nur libre office- das ist ein episches Stück Mist IMHO- im Moment bin ich auf einige Python-Skripte zu iterieren, da- im Laufe der Zeit werden sich die Daten ändern, und vielleicht wäre Python schneller? Ich weiß es nicht wirklich –

+1

Google Drive? Es macht den Job ziemlich schnell :) – Adib

Antwort

4

Sie können es einfach mit Python schreiben in eine temporäre Datei und ersetzt dann das Original.

import csv 
from operator import itemgetter 
from tempfile import NamedTemporaryFile 
from shutil import move 

with open("edsa_data.csv") as f, NamedTemporaryFile(dir=".", delete=False) as tmp: 
    # itertools.imap python2 
    csv.writer(tmp).writerows(map(itemgetter(3, 5, 7, 9), csv.reader(f))) 
move(tmp.name, "edsa_data.csv") 

Für eine allgemeinere Ansatz:

import csv 
from operator import itemgetter 
from tempfile import NamedTemporaryFile 
from shutil import move 




def keep_columns(csv_f, keep_cols, **kwargs): 
    with open(csv_f) as f, NamedTemporaryFile("w", dir=".", delete=False) as tmp: 
     csv.writer(tmp, **kwargs).writerows(itemgetter(*keep_cols)(row) 
              for row in csv.reader(f, **kwargs)) 
    move(tmp.name, csv_f) 


keep_columns("edsa_data.csv", (3, 4, 7, 9)) 

Für die kwargs Sie September passieren kann = ""skipinitialspace = True etc ..

+0

aus irgendeinem Grund mag es nicht wie mit 'move (move (tmp.name," edsa_data.csv ")' –

+0

er sagt "ungültige Syntax" über die Zeile 10 –

+0

ah- nie mind- nicht mehr- was hat sich geändert? –

2

Für eine einfache Wartung, Ich würde ein DictReader/DictWriter Paar verwenden.

import csv 
import sys 

with open(sys.argv[1], 'r') as csv_infile: 
    with open(sys.argv[2], 'w') as csv_outfile: 
     csv_in = csv.DictReader(csv_infile) 
     csv_out = csv.DictWriter(
      csv_outfile, 
      ['Employer','Location','Country','Jobs'], 
      extrasaction='ignore') 
     csv_out.writeheader() 
     csv_out.writerows(csv_in) 
Verwandte Themen