Seite 1 von 1
beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 14:35
von evd
Hallo zusammen
Ich habe ne, wahrscheinlich kleinere Frage...
Ich will eine in meinem Programm einen Text aus einer Datei auslesen.
wenn ich sie mir anschaue, hat sie keine Zeilenumbrüche, doch wenn ich
Code: Alles auswählen
self.art = "liste"
self.liste = open("/home/evd/Schreibtisch/python/Amazon/Listen/"+self.art).read()
ausführe kommt bei mir immer ein Zeilenumbruch raus, also
(edit: ich habe die "#" als "ende" zeichne einer Eingabe genommen, ergo wurden schon 2 eingaben getätigt)
ist das normal ... was ich bezweifle ...
vielen Dank im Vorhinaus
EvD
ps.: ich habe mal im ganzen Programm nach einem "\n" gesucht, aber ich habe nirgends "\n" stehen
(edit: "/" zu "\" gemacht, da verschrieben)
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 14:46
von BlackJack
@evd: '/n' ist kein Zeilenumbruch sondern zwei Zeichen, ein Schrägstrich gefolgt vom Buchstaben 'n'. Woher weisst Du/willst Du wissen was in `self.liste` tatsächlich enthalten ist. Zu zeigst weder Code wo in die Datei geschrieben wird, noch Code mit dem Du das gelesene anzeigst. Und zwar so dass man genau sehen kann was die Daten (nicht) enthalten, also zum Beispiel die `repr()`-Darstellung.
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:06
von /me
Das ist wieder ein Beispiel dafür wie wichtig es ist echten funktionierende Code, echte Ausgaben und echte Fehlermeldungen anzugeben.
Deine Ausgabe zeigt dir möglicherweise ein \n für einen Zeilenumbruch an, aber definitiv kein /n. Jetzt wäre natürlich noch die Frage, auf welche Art und Weise du dir die Daten denn überhaupt ausgeben lässt.
Code: Alles auswählen
>>> text = 'Hallo\nWelt'
>>> print(text)
Hallo
Welt
>>> print(repr(text))
'Hallo\nWelt'
>>> print([text])
['Hallo\nWelt']
Ist dir hier klar, warum in welchem Fall die jeweilige Ausgabe entsteht?
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:08
von evd
ich habe die Datei per Hand erstellt, daher kann ich wissen was in dem Text Dokument geschrieben steht, und der Debuger zeigt mir "self.liste" an...
und jup sorry, habe mich verschrieben, meinte "\n"

ich verbessere es gleich mal
naja, wie gesagt, ich kann zwar das Posten, wo was geschrieben wird, aber bis dahin komme ich gar nicht. ich habe die ersten eingaben (aus Testzwecken) per Hand eingegeben, und dann das Programm bis dahin laufen lassen. ergo habe ich nicht mehr als ein Klassenaufruf, in der (in def __init__) in den ersten beiden zielen das steht (’self.art = "liste"’ ist als Variable definiert, aber da die Datei gefunden wird, kann darin nicht der Fehler liegen)
@me
ja, es ist mir bewusst

ich lasse ihn mir nicht ausgeben(zumal das bei nichts zeigen würde wenn ich "hallo welt \n" ausgen lassen würde, sieht man ja nicht den Absatz), und eine Fehlermeldung bekomme ich auch nicht, zumindest nicht dort, sondern viel weiter hinten, wenn ich den text auslesen will, den ich bearbeitet habe, weil er nichts mit Zeilenumbrüchen anfangen kann. aber die Fehlerquelle ist dort, weil ich ja dort die Zeilenumbrüche rein wurstele, durch
Code: Alles auswählen
self.liste_schreiben = open("/home/evd/Schreibtisch/python/Amazon/Listen/" + self.art, "w")
self.liste2 = self.liste, "hallo")
self.liste_schreiben.write(self.liste2)
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:19
von EyDu
Naja, irgendwo wird der Fehler wohl liegen. Wenn du aber werde Code noch den genauen Dateiinhalt zeigen willst, dann kann man dir schlecht helfen. Das würde nur in sinnloses Raten übergehen.
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:27
von evd
der genau Dateiinhalt ist, wie gesagt "Misch#test#" und das, zumindest in meinem Texteditor volkommen ohne Zeilenumbruch.
der Code, (bis zu dem Fehler, an dem ich dann hinten noch ein \n bekomme) lautet wie folgt
Code: Alles auswählen
import sys,os
from PyQt4 import QtGui, QtCore, uic
class start(QtGui.QDialog):
def __init__(self):
super(start, self).__init__()
self.ui = uic.loadUi('start.ui', self)
self.ui.show()
self.pb_sta_lsb.clicked.connect(self.bearbeiten)
self.pb_sta_ips.clicked.connect(self.int_suche)
self.pb_sta_lis.clicked.connect(self.List_suche)
def int_suche(self):
self.ui.close()
Interpreten_Suche()
def List_suche(self):
self.ui.close()
List_suche()
def bearbeiten(self):
self.ui.close()
Listen_Bearbeiten()
class Listen_Bearbeiten(QtGui.QDialog):
def __init__(self):
super(Listen_Bearbeiten, self).__init__()
self.vonwo= 0
self.ui = uic.loadUi('Listen_Bearbeiten.ui', self)
self.ui.show()
self.pb_lsb_zuruck.clicked.connect(self.zuruck)
self.art = "listen"
self.aListenverwalter = Listenverwalter(self.art)
.
.
.
class Listenverwalter():
def __init__(self, part):
self.art = part
self.liste = open("/home/evd/Schreibtisch/python/Amazon/Listen/"+self.art).read()
.
.
.
def main():
app = QtGui.QApplication(sys.argv)
start()
exit(app.exec_())
main()
das ist alles wichtige, und self.liste lasse ich mir über den debugger ausgeben, also kein Ausgabebefehl
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:37
von EyDu
Wie sieht denn die Ausgabe von ``print(repr(self.liste))`` aus?
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("/n")
Verfasst: Mittwoch 20. August 2014, 15:40
von evd
'Misch#test#\n'
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 15:44
von EyDu
Dann wird wohl ein Zeilenumbruch in der Datei sein. Wie groß ist diese denn (in Bytes)?
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 15:46
von evd
dachte ich auch schon, aber wenn ich in einem normalen Textbearbeitungsprogramm dad janze lade, habe keinen Umbruch ...
12 Bytes ist es groß
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 15:47
von EyDu
Dann belügt dich dein Editor oder du hast ihn falsch eingestellt. 'Misch#test#\n' sind genau 12 Bytes. In der Datei befindet sich also ein Newline.
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 15:52
von evd
darf ich das bezweifeln, denn selbst wenn ich ein neue Datei anlege, und dort genau das reinschreibe (nicht kopiere, schreibe) habe ich auch 12 Bytes ...
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 16:04
von EyDu
Und, weißt du was der Editor im Hintergrund macht? Schreib die Datei doch mal mittels
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 16:34
von BlackJack
@evd: Du darfst das gerne bezweifeln, aber wenn man einfach mal zählt:
Code: Alles auswählen
In [36]: for i, character in enumerate(text, 1):
....: print i, repr(character)
....:
1 'M'
2 'i'
3 's'
4 'c'
5 'h'
6 '#'
7 't'
8 'e'
9 's'
10 't'
11 '#'
Wenn Deine Datei also 12 Bytes lang ist, dann *muss* da ja noch irgendwas anderes als diese Zeichen drin sein. Zum Beispiel ein Zeilenende-Zeichen. Viele Editoren fügen das auch am Ende beim Speichern automatisch ein sofern man das nicht in den Einstellungen deaktiviert. Denn normalerweise möchte man so ein Zeichen am Ende haben.
Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 17:18
von evd
ja ...
ja, ich gebe mich geschlagen ....
was ein klump : /
aber danke noch mal für eure schnelle Hilfe

Re: beim Auslesen einer Datei kommt Zeilenumbruch ("\n")
Verfasst: Mittwoch 20. August 2014, 19:42
von Hellstorm
Im Zweifelsfall kannst du dir die Datei auch einfach mit einem Hex-Editor anschauen. Da siehst du dann hundertprozentig genau,
was in der Datei drin steht, ohne dass der Editor dir da irgend etwas verbirgt, wie ein Byte Order Mark am Anfang oder ein Zeilenumbruch am Ende. Und du siehst auch genau ob es ein LF-Zeilenumbruch oder ein CRLF-Zeilenumbruch ist.
Ohne Zeilenumbruch:
Mit Zeilenumbruch (Unix):
Mit Zeilenumbruch (Windows):
Mit Byte Order Mark + Zeilenumbruch Windows:
An druckbaren Zeichen (also nicht-Whitespace) ist das alles gleich und auf den ersten Blick sieht es im Texteditor auch gleich aus, aber im Hex-Editor ist es doch völlig unterschiedlich.