Seite 1 von 1
Verzeichnis öffnen und Dateien auslesen
Verfasst: Dienstag 6. Oktober 2015, 17:13
von eloziomek
Im Verzeichnis Input sind die Dateien:
002Sub_Das_Parf\xc3\xbcm.txt', '002Meta_Das_Parf\xc3\xbcm.txt~',
ABER das Programm bearbeitet diese Dateien!
['002Sub_Das_Parf\xc3\xbcm.txt', '002Meta_Das_Parf\xc3\xbcm.txt~', '002Meta_Das_Parf\xc3\xbcm.txt', '001Meta_Berlin_Alexanderplatz.txt~', '003Meta_Faust (copy).txt~']
'002Meta_Das_Parf\xc3\xbcm.txt', '001Meta_Berlin_Alexanderplatz.txt~', '003Meta_Faust (copy).txt
werden immer mit bearbeitet (sie waren zuvor im Ordner Input), selbst wenn ich das Programm in andere Ordner lege und die Variablen umbenenne etc...
Wo liegt der Fehler? Wo sind die Dateien gespeichert?
Viele Grüße aus Berlin
Micha
Code: Alles auswählen
def nlp_textrazor():
path = 'Input/'
outdir = ''
dirs = os.listdir(path)
print dirs
for file in dirs:
print "Processing: " + file
filename = path + file
outfilename = (outdir + file)
text = open(filename, 'r').read().split()
s = ''.join(text)
stop_words = open('stopwords.txt', 'r').read().split()
words = (text)
filtered_text = [w for w in words if not w in stop_words]
newfile = open(outfilename, "w")
for line in filtered_text:
s = str(line) + '\n'
newfile.write(s)
return
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Dienstag 6. Oktober 2015, 17:33
von BlackJack
@eloziomek: Die Dateien sind offensichtlich im ``Input/``-Verzeichnis. Vielleicht das nicht das ``Input/``-Verzeichnis welches Du erwartest, aber so heisst das Verzeichnis.
Zum zusammensetzen von Pfadteilen sollte man übrigens `os.path.join()` verwenden und nicht ``+``. Das funktioniert beispielsweise auch dann wenn am Ende von den Teilen kein Pfadtrenner vorhanden ist, oder wenn ein späterer Teil absolut angegeben ist.
`dirs` ist ein schlechter Name für etwas was nichts mit Verzeichnissen zu tun hat.
Die erste Zuweisung an `s` macht keinen Sinn und ``words = (text)`` ist auch nicht sinnvoll. Die Zuweisung nicht, und die Klammern schon mal gar nicht.
Der ``str(line)``-Aufruf ist sinnfrei und `line` ist für ein einzelnes Wort auch kein wirklich passender Name.
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Dienstag 6. Oktober 2015, 17:41
von eloziomek
@BlackJack
Danke für die schnelle Antwort und Hinweise.
Die Dateien sind gelöscht und können nicht im Verzeichnis Input sein..
:K
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Dienstag 6. Oktober 2015, 19:20
von Sirius3
@eloziomek: schreib einfach mal ein
vor Deinen listdir aufruf, dann weißt Du welches Input-Verzeichnis Du tatsächlich durchsuchst.
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Dienstag 6. Oktober 2015, 22:51
von eloziomek
@sirius3 Guter Tipp!
aber leider immer noch das Verzeichnis mit den erwarteten Dateien:
002Sub_Das_Parf\xc3\xbcm.txt', '002Meta_Das_Parf\xc3\xbcm.txt~',
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Mittwoch 7. Oktober 2015, 06:29
von Sirius3
@eloziomek: wenn die zusätzlichen Dateien nicht existieren, dann müßte ja das Lesen fehlschlagen, andernfalls ist Deine Erwartung falsch.
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Mittwoch 7. Oktober 2015, 09:26
von BlackJack
@eloziomek: Noch mal allgemein was zum Quelltext: Die Einrücktiefe sollte vier Leerzeichen pro Ebene sein.
`file` ist der Name eines eingebauten Datentyps. Ausserdem passt der Name sowieso nicht, denn es handelt sich nicht um Dateien sondern um Datei*namen* die an diesen Namen gebunden werden.
Dateien die man öffnet sollte man auch wieder schliessen. Man sollte sich nicht darauf verlassen dass das zeitnah automatisch passiert. Die ``with``-Anweisung bietet sich da an. Da sowohl mit den Textdateien als auch mit der Datei mit den Stopwörtern nach dem laden das gleiche gemacht wird, bietet es sich an das in eine Funktion auszulagern.
Innerhalb der Schleife wird für jede Textdatei die Stopwörter-Datei immer wieder neu eingelesen. Das ist unnötige Arbeit, denn die ändert sich ja nicht während das Programm läuft.
Das ``return`` am Ende ist überflüssig.
Ich lande dann ungefähr hier (ungetestet):
Code: Alles auswählen
def load_words(filename):
with open(filename, 'r') as text_file:
return text_file.read().split()
def nlp_textrazor():
path = 'Input'
filenames = os.listdir(path)
print filenames
stop_words = set(load_words('stopwords.txt'))
for filename in filenames:
print 'Processing:', filename
words = load_words(os.path.join(path, filename))
with open(filename, 'w') as filtered_file:
for word in (w for w in words if w not in stop_words):
filtered_file.write(word + '\n')
Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Sonntag 25. Oktober 2015, 15:42
von eloziomek
Vielen Dank für die ausführliche Antwort!
Der Code führt alles korrekt aus, allerdings bearbeitet es immernoch die Dateien (siehe Screenshot), die gar nicht im Ordner liegen (sie sind nichtmal auf der Festplatte).
Es schränkt mich nicht weiter ein, da das Programm richtig ausgeführt wird; ich würde aber gerne verstehen WIESO
Viele Dank und Grüße aus Berlin
(
http://www.bilder-upload.eu/show.php?fi ... 785031.png)

Re: Verzeichnis öffnen und Dateien auslesen
Verfasst: Sonntag 25. Oktober 2015, 17:38
von BlackJack
@eloziomek: Was sagt denn ein `ls Input` in der Shell? Vielleicht ”lügt” Dich der Dateibrowser ja auch an und zeigt typische temporäre Dateien (die mit ~ enden) einfach nur nicht an‽