Forum: PC-Programmierung Python: CSV - Zeilen entfernen


von Alex (Gast)


Lesenswert?

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

von Karl Käfer (Gast)


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)?

von ui (Gast)


Lesenswert?

regex

von Florian F. (flof3000)


Lesenswert?

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

von Alex (Gast)


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?

von Thomas S. (doschi_)


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/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

: Bearbeitet durch User
von Alex (Gast)


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

von Sheeva P. (sheevaplug)


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)!

von Sheeva P. (sheevaplug)


Lesenswert?

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.

von Thomas S. (doschi_)


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
von Sheeva P. (sheevaplug)


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.

von Christoph S. (christoph2) Benutzerseite


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 :-)

von Christopher J. (christopher_j23)


Lesenswert?

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

von Thomas S. (doschi_)


Lesenswert?

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

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.