Python: CSV - Zeilen entfernen

Gast #5141002
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)?
Gast #5141557
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?
#5141571
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/Very-Simple.html
Beispiele: http://gilmation.com/articles/filtering-lines-in-awk/
https://www.gnu.org/software/gawk/manual/html_node/More-Complex.html#More-Complex

awk gibt es z.B. hier: http://gnuwin32.sourceforge.net/packages/gawk.htm
Gast #5141577
Ü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
#5142303
Alex schrieb:
> Abhängig von den Zeilennummern, nicht von den Werten in den einzelnen
> Zellen
1
with open(filename, 'r') as ifh:
2
  counter = 0
3
  for line in ifh:
4
    counter += 1
5
    if counter in range(100, 200):
6
      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.
#5142415
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.
#5142654
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.
Persönliche Seite #5149390
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 :-)
#5150497
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.