mikrocontroller.net

Forum: PC-Programmierung Python: CSV - Zeilen entfernen


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
wie kann ich mit Python in einer CSV-Datei einzelnen Zeilen in einem 
bestimmten definierten Bereich entfernen?

Autor: Karl Käfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> wie kann ich mit Python in einer CSV-Datei einzelnen Zeilen in einem
> bestimmten definierten Bereich entfernen?

Was heißt "in einem bestimmten Bereich"? Ist das abhängig von den Werten 
in den CSV-Feldern oder abhängig von de(r|n) Zeilennummer(n)?

Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
regex

Autor: Florian F. (flof3000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit pandas!
import pandas as pd
df = pd.read_csv('meine_datei.csv')
df = df.drop(df.index[500:550]) # welche zeilen auch immer du loswerden willst. Ab 0 gezaehlt!
df.to_csv("meine_datei_ohne_500-500.csv")

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es damit auch die Möglichkeit, Zeilen nach Stringteilen zu 
durchsuchen, indem man verschiedene Schlüsselwörter angibt und die 
Zeilen, die diese enthalten, entfernt oder ausgeblendet werden?

Autor: Thomas Sch. (doschi_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Gibt es damit auch die Möglichkeit, Zeilen nach Stringteilen zu
> durchsuchen, indem man verschiedene Schlüsselwörter angibt und die
> Zeilen, die diese enthalten, entfernt oder ausgeblendet werden?

Falls eine Alternative in Frage kommt:
Das geht m.E. deutlich einfacher mit awk.

Allg. Infos:  z.B. 
https://www.gnu.org/software/gawk/manual/html_node...
Beispiele: http://gilmation.com/articles/filtering-lines-in-awk/
https://www.gnu.org/software/gawk/manual/html_node...

awk gibt es z.B. hier: http://gnuwin32.sourceforge.net/packages/gawk.htm

: Bearbeitet durch User
Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens bekomme ich mit Panda folgende Fehlermeldung:

C:\Users\CSVProjekt>python "new 1.py"
Traceback (most recent call last):
  File "new 1.py", line 5, in <module>
    df = pd.read_csv('out.csv')
  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 655, 
in parser
_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 411, 
in _read
    data = parser.read(nrows)
  File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 1005, 
in ..........
....
....
....

@Karl Käfer
Abhängig von den Zeilennummern, nicht von den Werten in den einzelnen 
Zellen

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas S. schrieb:
> Alex schrieb:
>> Gibt es damit auch die Möglichkeit, Zeilen nach Stringteilen zu
>> durchsuchen, indem man verschiedene Schlüsselwörter angibt und die
>> Zeilen, die diese enthalten, entfernt oder ausgeblendet werden?
>
> Falls eine Alternative in Frage kommt:
> Das geht m.E. deutlich einfacher mit awk.

awk? egrep(1)!

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Abhängig von den Zeilennummern, nicht von den Werten in den einzelnen
> Zellen
with open(filename, 'r') as ifh:
  counter = 0
  for line in ifh:
    counter += 1
    if counter in range(100, 200):
      print(line)

Natürlich kann man statt "if counter in range(.., ..)" auch anders 
Abfragen, etwa "if counter > 100 and counter < 200" oder "if counter not 
in [2, 4, 5]" oä, aber das Prinzip sollte klar sein: einfach einen 
Counter mitführen.

Autor: Thomas Sch. (doschi_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Thomas S. schrieb:
>> Alex schrieb:
>>> Gibt es damit auch die Möglichkeit, Zeilen nach Stringteilen zu
>>> durchsuchen, indem man verschiedene Schlüsselwörter angibt und die
>>> Zeilen, die diese enthalten, entfernt oder ausgeblendet werden?
>>
>> Falls eine Alternative in Frage kommt:
>> Das geht m.E. deutlich einfacher mit awk.
>
> awk? egrep(1)!

je nach Anwendungsfall.
Bei vielen komplexen Filterkriterien (und wenn der Output evtl. noch 
etwas modifiziert werden muss), würde ich awk vorziehen.
Aber es gint sehr viel gute Bordmittel. - und awk auch für Win-Doof.

: Bearbeitet durch User
Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas S. schrieb:
>>> Falls eine Alternative in Frage kommt:
>>> Das geht m.E. deutlich einfacher mit awk.
>>
>> awk? egrep(1)!
>
> je nach Anwendungsfall.
> Bei vielen komplexen Filterkriterien (und wenn der Output evtl. noch
> etwas modifiziert werden muss), würde ich awk vorziehen.
> Aber es gint sehr viel gute Bordmittel. - und awk auch für Win-Doof.

Unter Windows 10 gibt es als "experimental feature" die Möglichkeit, 
Linux-Pakete direkt aus den Ubuntu-Repositories zu nutzen, also auch 
eine bash und das zugehörige Kommandozeilen-Userland. Unser 
Windows-Chefentwickler hat das ausprobiert und ist ziemlich beeindruckt.

CSV-Dateien würde ich aber nur in den allereinfachsten Fällen mit awk(1) 
verarbeiten; sobald Quoting oder Escaping ins Spiel kommen, artet die 
Sache sonst ziemlich schnell aus.

Autor: Christoph Schüler (christoph2) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Python beinhaltet übrigens von Hause aus ein CSV-Modul...
https://docs.python.org/2/library/csv.html

Ansonsten kann ich das Python basierte csvkit nur wärmstens empfehlen:
https://csvkit.readthedocs.io/en/1.0.2/
https://github.com/wireservice/csvkit
https://pypi.python.org/pypi/csvkit

Es handelt sich um eine Sammlung von Commandline-Tools die CSV lesen, 
auf verschiedene Art und Weisen bearbeiten und wiederum CSV ausgeben,
integriert sich also sehr gut in eine Pipes'n Redirections Toolchain.
Meiner Meinung nach essentiell im Umgang mit CSV.
Das besondere Highlight ist csvsql; SQL-Anfragen auf CSV-Dateien - 
Ziemlich gut der Specht :-)

Autor: Christopher Johnson (christopher_j23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls es wirklich schnell gehen muss, Python zu langsam und awk zu 
kompliziert ist:
https://github.com/BurntSushi/xsv

Autor: Thomas Sch. (doschi_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube inzwischen, da kommt nichts mehr vom TO.
Evtl. ist das Problem gelöst (wie auch immer?)

: Bearbeitet durch User
Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph S. schrieb:
> Python beinhaltet übrigens von Hause aus ein CSV-Modul...
> https://docs.python.org/2/library/csv.html

Leider hat dieses Modul aus der Standarddistribution Probleme mit 
CSV-Dateien in bestimmten Encodings, in solchen Fällen hilft das Modul 
unicodecsv, das allerdings nicht zur Standarddistribution gehört.

> Ansonsten kann ich das Python basierte csvkit nur wärmstens empfehlen:

Dieser Empfehlung kann ich mich nur anschließen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.