Dateiinhalt importieren

Code-Stücke können hier veröffentlicht werden.
Antworten
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 00:05

Hallo,

ich bin Anfänger. Hab in der Vergangenheit ab und zu mit Macromedia/Adobe Directors Lingo programmiert, hab aber mit Python erst gestern angefangen.

Ich hänge gerade fest, wahrscheinlich nur mal wieder ein Problem mit der Syntax! ;)

Ich würde gerne den Inhalt einer Textdatei importieren und darstellen.
Der Pfad lautet *.py/dateien/01/01.txt

Code: Alles auswählen

liste = open("dateien/01/01.txt").readlines()
print(liste)
Wenn ich die Datei 01.txt in das Verzeichnis meines *.py-Files verschiebe, klappt es mit dem Code:

Code: Alles auswählen

liste = open("01.txt").readlines()
print(liste)

Code: Alles auswählen

['zeile1\n', 'zeile2\n', 'zeile3\n', 'zeile4\n', 'zeile5\n']
Also scheint es ja nicht ganz so falsch zu sein…

Nur durch die Ordnerstruktur wird die Datei nicht gefunden, hat jemand 'nen Tipp?

Dann hab ich direkt noch eine zweite Fragen:
wie kann ich bei den Elementen in der Liste jeweils das "\n" für das Return am Zeilenende entfernen? In jeder Datei befinden sich ein paar Zeilen mit Umbrüchen…

Viele Grüße und vielen Dank im voraus

calm
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 00:15

is' ja ein Ding!

Hab den Fehler gefunden!!!

Leider klappt es nicht wenn in der Textdatei Umlaute vorhanden sind…
Das kann ich aber leider nicht ausschließen.
Hat jemand eine Idee wie ich den Text aus der Datei zeilenweise auslesen kann, aber mit Umlauten?


Gruß

calm
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 00:26

Das hier geht ohne Probleme mit Umlauten, Es liegt wohl am Import!?

Code: Alles auswählen

werte = ["a","ö","c"]
print(werte)
Diese Fehlermeldung erhalte ich

Code: Alles auswählen

Traceback (most recent call last):
  File "*.py", line 5, in <module>
    liste = open("dateien/01/01.txt").readlines()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
BlackJack

Montag 27. März 2017, 01:23

@calm: Wenn Du Textdateien hast die Zeichen ausserhalb von ASCII beinhalten, dann musst Du beim öffnen der Datei die Kodierung angeben in der die Datei gespeichert wurde. Sonst ist nicht klar welche Bytewerte welchen Buchstaben entsprechen.

Du öffnest die Datei ohne sie wieder zu schliessen. Das sollte man nicht machen. Schau Dir in dem Zusammenhang mal die ``with``-Anweisung an.

`readlines()` würde ich nicht verwenden, das kann man auch mit der `list()`-Funktion und dem Dateiobjekt als Argument erledigen. Da Du mit jeder Zeile etwas machen willst (Zeilenende entfernen) bietet sich aber eher eine „list comprehension“ an.
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 08:12

Hi blackjack,

vielen Dank für deine Antwort!

Leider habe ich nach deiner Antwort mehr Fragen als vorher!!! :lol:
Ich fummel und google mich erst mal durch bevor ich mich wieder melde…


Trotzdem besten dank!
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 17:47

Ta daa!!

Code: Alles auswählen

liste = []
fobj = open("dateien/01/01.txt", "r", encoding = "utf8")
for line in fobj:
    print(line)
    liste.append(line[:-1])
fobj.close()
print(liste)
ergibt:

Code: Alles auswählen

============== RESTART: /Users/office/Desktop/WWM Python/WWM.py ==============
zeile 1

zeile 2

zeile 3

zeile 4

zeile 5

zeile 6

zeile 7

['zeile 1', 'zeile 2', 'zeile 3', 'zeile 4', 'zeile 5', 'zeile 6', 'zeile 7']
>>> 

Vielen Dank soweit!!!
calm
User
Beiträge: 6
Registriert: Sonntag 26. März 2017, 23:48

Montag 27. März 2017, 18:46

Hallo,

gibt es so eine case-Anwendung wie in Lingo auch in Python?

Code: Alles auswählen

case expression of 
   value1 : statement 
   value2 : statement
otherwise: 
   statement(s)
end case
oder mach ich das mit

Code: Alles auswählen

if
elif
else
BlackJack

Montag 27. März 2017, 20:50

@calm: Einfach das letzte Zeichen jeder Zeile wegzuwerfen ohne sich anzuschauen ob das *wirklich* ein Zeilenende ist, kann ins Auge gehen. Manchmal ist die letzte Zeile einer Datei beispielsweise nicht mit einem Zeilenende abgeschlossen, und da würdest Du dann das letzte Zeichen der Zeile wegwerfen.

So etwas wie ``case`` gibt es nicht. ``if``/``elif``/``else`` oder manchmal kann man auch ein Wörterbuch das Werte auf Funktionen abbildet, zum „dispachen“ verwenden.
Antworten