Hallo Zusammen, wie kann ich mit Python in einer CSV-Datei einzelnen Zeilen in einem bestimmten definierten Bereich entfernen?
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)?
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") |
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?
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
Ü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
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)!
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.
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
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.
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 :-)
Falls es wirklich schnell gehen muss, Python zu langsam und awk zu kompliziert ist: https://github.com/BurntSushi/xsv
Ich glaube inzwischen, da kommt nichts mehr vom TO. Evtl. ist das Problem gelöst (wie auch immer?)
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.