Probleme mit dem Auslesen: open("file.txt", "r")

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Epileptiker
User
Beiträge: 2
Registriert: Donnerstag 5. April 2018, 14:26

Hallo. Ich möchte eine Datei über open("file.txt", "r") innerhalb meines Skripts auslesen. Sieht jemand, warum es nicht funktioniert? Sobald ich open("file.txt", "r") innerhalb des Skripts durch den Inhalt der zu öffnenden Dateien austausche, funktioniert es wieder ganz normal. Alle Dateien sind im selben Verzeichnis gespeichert.

Der Inhalt der zu öffnenden Dateien sieht etwa so aus:

Code: Alles auswählen

["Wort1", "Wort2", "Wort3", "usw"]
Mein Skript:

Code: Alles auswählen

import random, time, tweepy

liste1 = open("liste1.txt", "r")
liste2 = open("liste2.txt", "r")
liste3 = open("liste3.txt", "r")

def eins():
    return random.choice(liste1) + random.choice(liste2)

def zwei():
    return random.choice(liste2) + random.choice(liste3)

consumer_key = 'XXX'
consumer_secret = 'XXX'
access_token = 'XXX'
access_token_secret = 'XXX'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

while True:
    postthis = random.choice([eins,zwei])()
    if len(postthis) <= 140:
        api.update_status(status=postthis)
        time.sleep(10)
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/User/Desktop/Beispiel/beispiel.py", line 22, in <module>
    postthis = random.choice([eins,zwei])()
  File "C:/Users/User/Desktop/Beispiel/beispiel.py", line 11, in zwei
    return random.choice(liste2) + random.choice(liste3)
  File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\random.py", line 256, in choice
    i = self._randbelow(len(seq))
TypeError: object of type '_io.TextIOWrapper' has no len()
>>>
Wie gesagt, die Fehlermeldung tritt nur auf, wenn ich den Inhalt meiner Textfiles mit besagtem Befehl auslesen möchte.

Danke
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Epileptiker: Du liest keinen Inhalt, sondern speicherst in liste123 nur ein Fileobjekt, das, wie die Fehlermeldung sagt, keine Länge kennt. Du mußt die Dateien schon lesen und in den Listen speichern.
Epileptiker
User
Beiträge: 2
Registriert: Donnerstag 5. April 2018, 14:26

Alles klar, ich bin davon ausgegangen, dass open("file.txt", "r") der dafür korrekte Befehl wäre, da das "r" schließlich für lesen steht... Kannst du mir sagen, welchen alternativen Befehl ich in mein Skript einbauen soll, damit es funktioniert?

Dass mein File keine Länge kennt verstehe ich nicht. Der Inhalt sind lediglich aneinander gereihte Begriffe in einer Liste. Was hat das mit der Länge in diesem Fall zu bedeuten?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

open oeffnet eine Datei. Dabei kann man eine Datei zum lesen, schreiben, schreiben mit anhaengen oder schreiben und lesen gleichzeitig (eher selten) oeffnen.

Dann ist sie aber nur offen. LESEN musst du dann immer noch. Also zB

Code: Alles auswählen

with open(dateiname, "r") as inf:
        inhalt = inf.read()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Epileptiker: lies am besten in dem Medium, das Du zum Python-Lernen benutzt, wie man mit Dateien umgeht. Das steht da ausführlicher erklärt, als ich es hier könnte.

@__deets__: das hilft dem OP jetzt nicht wirklich weiter, weil er doch eine Liste braucht.
Antworten