Ergebnis 1 bis 10 von 10

Spalten aus CSV-Datei löschen.

  1. #1 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.220
    Hi,
    ich habe eine CSV-Datei mit Kommagetrennten Werten. Dort sind eine ganze Menge Spalten überflüssig. Da die Datei insgesamt aber vergleichsweise groß ist, möchte ich die nich so gerne händisch bearbeiten müssen. Da gibts doch bestimmt nen Automatismus für?
    Gerne auch Lösungen die mit Linux funktionieren

    Gruß

    Look
    Lookbehind ist offline Geändert von Lookbehind (01.05.2014 um 13:38 Uhr) Grund: Rechtschreibung liegt im Koma.

  2. #2 Zitieren
    Drachentöter Avatar von Eduard Bär
    Registriert seit
    Oct 2006
    Beiträge
    4.856
    Code:
    $ echo -e "asdf,qwer,yxcv\nfoo,bar,baz" | cut -d , -f 1,3
    asdf,yxcv
    foo,baz
    Geht natürlich nur, wenn du kein Komma innerhalb der Spalten verwendest.
    Eduard Bär ist offline

  3. #3 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.220
    Zitat Zitat von Eduard Bär Beitrag anzeigen
    ...
    Geht natürlich nur, wenn du kein Komma innerhalb der Spalten verwendest.
    Kann ich nicht garantieren. Auf den ersten Blick finde ich zwar keine, aber die Datei ist einfach zu groß, als das man da wirklich einen Überblick hätte. Und da auch von Menschen geschriebener Text dabei ist, kann ich mir durchaus vorstellen, dass da vielleicht mal ein Komma mit dabei ist.

    Das Blöde ist: Der Fehler würde wahrscheinlich erst in 1-2 Monaten auffallen und dann aber richtig Arbeit nach sich ziehen.
    Lookbehind ist offline

  4. #4 Zitieren
    Drachentöter Avatar von Eduard Bär
    Registriert seit
    Oct 2006
    Beiträge
    4.856
    Dann probiers mal hiermit:

    Code:
    #!/usr/bin/env python
    import csv,sys,operator
    
    for row in csv.reader(iter(sys.stdin.readline, ''), delimiter=',', quotechar='"'):
        csv.writer(sys.stdout).writerow(operator.itemgetter(0,2)(row))
    Einfach in eine Datei schreiben und dein CSV an die Datei cat-en. In der Klammer hinter itemgetter kannst du die Spalten angeben die du haben möchtest.

    Code:
    $ cat test.csv 
    foo,bar,baz
    "Hello, world","foo, bar, baz",asdf
    
    $ cat test.csv | ./csvtest.py 
    foo,baz
    "Hello, world",asdf

    edit:
    Ah, man kann das auch zu einem Oneliner machen:
    cat test.csv | python -c "import csv,sys,operator;[csv.writer(sys.stdout).writerow(operator.itemgetter(0,2)(row)) for row in csv.reader(iter(sys.stdin.readline, ''), delimiter=',', quotechar='\"')]"
    Eduard Bär ist offline

  5. #5 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.220
    Gute Idee, bloß..
    Code:
    cat my_csv.csv | ./csv_cut.py > my_csv_short.csv 
    Traceback (most recent call last):
      File "./csv_cut.py", line 52, in <module>
        csv.writer(sys.stdout).writerow(operator.itemgetter(1,2,3,4,5,6,7,8,11,12,13,14,15,18,19,20,21,30,31,34,35,36,37,40,44,49,50,51,52,55,57,58,51,65,76,89)(row))
    IndexError: list index out of range
    Problem ist, dass teilweise ganz leere Zeilen drin zu sein scheinen, bzw teilweise auch Zeilenumbrüche innerhalb einzelner Felder. Ganz großes Tennis... Aber was hab ich erwartet? Der csv-Export stammt ja auch von einem Qualitätsprodukt. *grmpf*
    Lookbehind ist offline

  6. #6 Zitieren
    Drachentöter Avatar von Eduard Bär
    Registriert seit
    Oct 2006
    Beiträge
    4.856
    Hm... ja... dann weiß ich leider auch nicht weiter.

    Sind die Zeilenumbrüche regelmäßig oder durch Zeichen wie \ gekennzeichnet? Dann könnte man vielleicht erst die Zeilenumbrüche korrigieren und anschließend das Python Skript verwenden.
    Eduard Bär ist offline

  7. #7 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.220
    Zitat Zitat von Eduard Bär Beitrag anzeigen
    ...
    Sind die Zeilenumbrüche regelmäßig oder durch Zeichen wie \ gekennzeichnet? Dann könnte man vielleicht erst die Zeilenumbrüche korrigieren und anschließend das Python Skript verwenden.
    Schön wärs... aber was will man von einer Firma erwarten, die sich nichtmal an ihre eigenen Standards halten kann...
    Kein Bock mehr auf den Rotz... heute is Feiertag

    Danke dir trotzdem.
    Lookbehind ist offline

  8. #8 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.220
    Man könnte nach den Anführungszeichen gehen. Die Datei ist etwa so aufgebaut:
    Code:
    "wert1","wert2","wert
    
    25
    ","wert42","
    wert52"
    "wert1","wert2","wert25","
    wert
    
    42
    ","
    wert52"
    Lookbehind ist offline

  9. #9 Zitieren
    Drachentöter Avatar von Eduard Bär
    Registriert seit
    Oct 2006
    Beiträge
    4.856
    Ich hab das Python Skript grad nochmal mit deinem Beispiel getestet. Korrekt gequotete Zeilenumbrüche sind kein Problem. Das Problem scheint an den leeren Zeilen zu liegen. Die könntest du ja aber mit sed leicht entfernen: sed -i '/^$/d' test.csv
    Eduard Bär ist offline

  10. #10 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.626
    Zitat Zitat von Lookbehind Beitrag anzeigen
    Problem ist, dass teilweise ganz leere Zeilen drin zu sein scheinen, bzw teilweise auch Zeilenumbrüche innerhalb einzelner Felder. Ganz großes Tennis... Aber was hab ich erwartet? Der csv-Export stammt ja auch von einem Qualitätsprodukt. *grmpf*
    und wenn du mit dem "Qualitätsprodukt" (ich tippe mal auf Excel) die Datei importierst, dann die Spalten löschst die du nicht brauchst, und wieder exportierst?
    1 2 3 4 5
    Blue Force ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •