Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Python #32 – arbeiten mit Dateien und Verzeichnisse

Posted on 24. Februar 202130. April 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen wie du mit Dateien und Ordner in Python3 arbeiten kannst. Dieses Wissen benötigst zu wenn du zbsp. um eine Datei zum be-/verarbeiten zu öffnen.

Wie man eine Datei zum verarbeiten von Daten öffnet habe ich dir bereits im Beitrag Python #10: Dateiverarbeitung erläutert und möchte hier an diesen Beitrag anknüpfen.

Für das be-/verarbeiten von Dateien und Verzeichnisse benötigen wir das Modul „os„. Wollen wir zunächst einmal die Dateien und Verzeichnisse im aktuellen Verzeichnis auflisten.

  • prüfen auf Datei oder Verzeichnis
  • Zusammenfügen von Pfadangaben
  • ein kleines Programm zum anzeigen von Ordner & Dateien
import os

print(os.listdir("."))

Die Funktion „listdir“ erwartet einen Parameter welcher ein Ordner repräsentiert. In meinem oben gezeigten Beispiel repräsentiert der Punkt „.“ das aktuelle Verzeichnis.

C:\python3_test\ordner>dir
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: 162C-A96C

 Verzeichnis von C:\python3_test\ordner

09.02.2021  11:41    <DIR>          .
09.02.2021  11:41    <DIR>          ..
09.02.2021  11:39                35 folders.py
09.02.2021  11:39    <DIR>          ordner1
09.02.2021  11:40    <DIR>          ordner2
09.02.2021  11:41                 0 textdatei.txt
               2 Datei(en),             35 Bytes
               4 Verzeichnis(se), 71.160.610.816 Bytes frei

C:\python3_test\ordner>python3 folders.py
['folders.py', 'ordner1', 'ordner2', 'textdatei.txt']

C:\python3_test\ordner>

Zuerst habe ich den Inhalt des aktuellen Verzeichnisses mit dem Kommandozeilenbefehl „dir“ ausgegeben und danach das Python3 Skript ausgeführt. Wir sehen nun eine Liste mit den Dateien und Verzeichnissen.

prüfen auf Datei oder Verzeichnis

Was wir jedoch nicht erkennen können ist ob der Eintrag in der Liste nun eine Datei oder ein Verzeichnis ist. Dazu müssten wir nun diese Liste durchlaufen und jeweils einzeln prüfen ob dieser Eintrag eine Datei ist („os.path.isfile„). Alternativ kannst du mit „os.path.isdir“ prüfen ob der Eintrag ein Verzeichnis ist.

import os

print(os.listdir("."))

for e in os.listdir("."):
   if os.path.isfile(e):
      print(e, "ist eine Datei", sep=" ")
   else:
      print(e, "ist ein Verzeichnis", sep=" ")
C:\python3_test\ordner>python3 folders.py
['folders.py', 'ordner1', 'ordner2', 'textdatei.txt']
folders.py ist eine Datei
ordner1 ist ein Verzeichnis
ordner2 ist ein Verzeichnis
textdatei.txt ist eine Datei

Zusammenfügen von Pfadangaben

Manchmal möchte man eine bestimmte Datei oder einen bestimmten Ordner Verarbeiten. 

Am einfachsten ist es wenn man nun den vollen Pfad sich selber aufbau. 

folder = "c:\python3_test"
filename = "test.txt"

with open(folder+"\\"+filename, "r") as file:
   for line in file:
      print (line.strip())

Das klappt auch auf jedem PC mit Windows sehr gut. Aber was ist wenn wir dieses Skript dann auf einen Linux System ausführen möchten? Genau, es funktioniert nicht da wir unter Linux einen anderen Separator für Verzeichnisse und Dateien haben.

Hier hilft uns die Funktion „os.path.join“ weiter, dieser Funktion werden die Ordner / Dateinamen übergeben und wir erhalten eine Betriebssystemspezifische Zeichenkette zurück.

import os

folder = "c:\python3_test"
filename = "test.txt"

with open(os.path.join(folder,filename), "r") as file:
   for line in file:
      print (line.strip())

ein kleines Programm zum anzeigen von Ordner & Dateien

Im folgenden wollen wir einmal mit dem Modul „os“ sowie mit der, aus dem letzten Beitrag bekannten  Klasse „argv“ aus dem Modul „sys“ ein kleines Programm schreiben.

Ziel ist es den Inhalt eines beliebigen Ordners anzeigen zu lassen. Dabei sollen anzeigt werden:

  • der Zeitstempel,
  • der Typ (Ordner oder Datei),
  • der Name,
  • die Größe der Datei 

Die Sortierung soll so sein, das zunächst die Ordner und danach die Dateien aufgelistet werden. 

Python3 - anzeigen von Ordnerinhalten
Python3 – anzeigen von Ordnerinhalten
#laden der Module
import os
from datetime import datetime
import sys

#setzen des default Verzeichnisses
#dieses wird verwendet wenn kein Verzeichnis
#als Parameter übergeben wird
workingfolder = "."

#wenn zwei Parameter übergeben wurden
#dann soll der zweite genommen und als
#"Arbeitsverzeichnis" verwendet werden
if len(sys.argv) == 2:
   print(sys.argv[1])
   workingfolder = sys.argv[1]

#Liste mit Dateien
files = []
#Liste mit Ordner
folders = []

#wechseln in das "Arbeitsverzeichnis"
os.chdir(workingfolder)
#Ausgeben einer Zeichenkette auf der Konsole
print("Verzeichnis: ", workingfolder, "wird ausgelesen.", sep=" ")

#Für jeden Eintrag aus der Liste mache...
for e in os.listdir(workingfolder):
   #Versuche...
   try:
      #Absoluten Pfad zur Datei erstellen
      currentFile = os.path.join(workingfolder,e)
      #lesen und formatieren des Zeitstempels
      timestamp = '{0:%d.%m.%Y %H:%M:%S}'.format(datetime.fromtimestamp(os.stat(currentFile)[7]))
      #per default ist es erstmal ein Verzeichnis
      filetype = "<DIR>"
      isFolder = True
      #Dateigröße ist leer
      size = ""
      #wenn es eine Datei ist dann...
      if os.path.isfile(currentFile):
         #den Typen leer lassen
         #alternativ könnte man hier "<File>" schreiben
         filetype = ""
         #es ist kein Verzeichnis
         isFolder = False
         #Dateigröße aus den Attributen lesen und in Kilobyte umrechnen
         size = str(round(os.stat(e)[6]/1024,2))+" KB"
      
      #erzeugen einer Zeichenkette mit den ermittelten Werten
      line = timestamp +"\t"+ filetype +"\t"+ e +"\t"+ size
   
      #Wenn der aktuelle Eintrag ein Verzeichnis ist dann
      #soll dieser in die Liste mit Verzeichnisse aufgenommen werden,
      #andernfalls soll der Eintrag in die Liste mit Dateien aufgenommen werden.
      if isFolder: 
         folders.append(line) 
      else: 
         files.append(line)
   #Wenn ein Fehler auftritt so soll dieser ausgegeben werden
   except Exception as error:
      print("Fehler bei "+currentFile)
      print(error)

#Als erstes werden die Ordner ausgegeben
for folder in folders:
   print(folder)
#Danach werden die Dateien ausgegeben
for file in files:
   print(file)


Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}