Seite 1 von 1
Mehrere Files laden
Verfasst: Dienstag 6. Mai 2014, 08:15
von sirisunshine
Hey Leute,
ich hätte da mal wieder ein Problem.
Ich würde gern mehrere Text files einlesen.
Einen zu öffnen is ja recht einfach aber wie sieht das aus, wenn man zum Beispiel mehrere Ordner in einem Ordner hat und in jedem Ordner sind mehrere Dateien unter anderem auch die benötigten txt Dateien.
Kann man irgendwie zum Beispiel den Zielordner angeben und einen Code schreiben, der die Ordner nach den txt Dateien durchsucht und sie Automatisch öffnet wenn er welche findet?
Grüße
Re: Mehrere Files laden
Verfasst: Dienstag 6. Mai 2014, 08:30
von BlackJack
@sirisunshine: Schau Dir mal die `os.walk()`-Funktion an.
Re: Mehrere Files laden
Verfasst: Dienstag 6. Mai 2014, 12:55
von sirisunshine
Jut hab ich gemacht und funktioniert auch.
Code: Alles auswählen
import os
for root, dirs, files in os.walk("C:\Users\Name\Downloads\Dateien"):
for file in files:
if file.endswith(".txt"):
print file
Aber ich will ja das er auch Alle Textdateien nacheinander einließt und als print ausgibt. Bis jetzt gibt er mir ja nur die Namen der txt Dateien aus die er gefunden hat.
z.B.
Ich brauch Alle Inhalte aus den Dateien nacheinander als print ausgegeben.
Re: Mehrere Files laden
Verfasst: Dienstag 6. Mai 2014, 13:31
von Sirius3
Um Dich zu zitieren:
sirisunshine hat geschrieben:Einen zu öffnen is ja recht einfach
Beim Programmieren besteht die Lösung eines komplexen Problems immer aus der Kombination von einfachen Lösungen.
ps: Du brauchst noch `os.path.join`.
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 14:22
von boletus999
So z.B.
wobei dein Zeilenumbruch und die Zeilenelemente noch getrennt werden müssen
Code: Alles auswählen
import os
for root, dirs, files in os.walk("C:\Users\Name\Downloads\Dateien"):
for file in files:
if file.endswith(".txt"):
file = os.path.join(root, file)
file = open(file, "r")
print file.read().split(.............
Alternative mit fnmatch:
Code: Alles auswählen
import os
import fnmatch
for root, dirs, files in os.walk("C:\Users\Name\Downloads\Dateien"):
for file in files:
pattern = "*.txt"
if fnmatch.fnmatch(file, pattern):
file = os.path.join(root, file)
file = open(file, "r")
print file.read().split(................
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 14:33
von BlackJack
Vielleicht sollte man den Namen `file` nicht an so viele verschiedene Werte mit verschiedenen Typen binden. Das wird ein wenig unübersichtlich. Wobei der ursprüngliche Wert damit schon falsch benannt ist, weil es keine Datei sondern ein Dateiname ist. Und `file` ist auch im Grunde schon vergeben für den Datentyp `file`.
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 14:37
von /me
sirisunshine hat geschrieben:Code: Alles auswählen
for root, dirs, files in os.walk("C:\Users\Name\Downloads\Dateien"):
Das funktioniert jetzt nur zufällig da ein Backslash eine Escape-Sequenz einleitet. Bei der aktuellen Kombination ist das unkritisch, aber wenn der Pfad zum Beispiel "C:\Users\name\Downloads\Dateien" heißen würde (man beachte das kleine "n"), dann schlüge die Routine fehl. Der Grund dafür ist, dass "\n" ein einzelnes Zeichen im resultierenden String ergibt, nämlich das Newline-Zeichen.
Es gibt drei Möglichkeiten, das Problem zu umgehen:
Code: Alles auswählen
# doppelte Backslashes (die im String selber dann zu einem Backslash werden)
for root, dirs, files in os.walk("C:\\Users\\Name\\Downloads\\Dateien"):
# ein Raw-String, in dem der Backslash kein Escape-Zeichen ist
for root, dirs, files in os.walk(r"C:\Users\Name\Downloads\Dateien"):
# Forward-Slashes (ja, die funktionieren auch unter Windows)
for root, dirs, files in os.walk("C:/Users/Name/Downloads/Dateien"):
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 15:10
von boletus999
oder man macht es Unabhängig des BS.
Code: Alles auswählen
...
raw = os.path.join(os.path.expanduser("~"), "Downloads", "Dateien")
for root, dirs, files in os.walk(raw):
@BlackJack done!
Code: Alles auswählen
import os
for path, subdirs, files in os.walk(raw):
for name in files:
if name.endswith(".txt"):
file = open(os.path.join(path, name), "r")
print file.read().split(.............
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 15:25
von BlackJack
@boletus999: Wozu ist das ``os.path.dirname(__file__)`` dabei gut?
Edit: Nee, nicht wirklich done. `f` ist kein guter Name und `file` wird immer noch für zwei verschiedene Dinge verwendet - den kompletten Pfad und kurz danach das Dateiobjekt.
Re: Mehrere Files laden
Verfasst: Mittwoch 7. Mai 2014, 15:35
von boletus999
@BlackJack
Danke!!
weil ich schon wieder "absolut" in der "Relation" gedacht habe.
Das "os.path.dirname(__file__)" kann natürlich weg, außer man steht auf "os.path.abspath(...)" so wie ich.
ich habe es oben korrigiert.
Re: Mehrere Files laden
Verfasst: Donnerstag 8. Mai 2014, 12:20
von sirisunshine
Sehr Geil Jungs,
Danke für eure Hilfe. Hat alles hingehauen.
Die os.path.join(path,file) Funktion kann Alles.
Vielen Dank nochmal
Grüße
Siri