joooooooooooooooooo Leute habe den Fehler gefunden,
vor allem danke euch für jeden Vorschlag, den Ihr geleistet habt.
Leider hat Python Probleme mit umlauten, und überall in der Zeilen wo umlauten sind wird die Zeichen falsch geliefert.
Leider wies noch nicht wie ich das Problem beheben kann, jetzt habe ich in der TEXT-File die umlaute entfernt, daher werden die Zeichen richtig geliefert.
String : falsches String aus Datei gelesen
Das kann man so nicht stehen lassen, denn Python hat keine Probleme mit Umlauten. Ich vermute eher, dass du eine UTF-8-codierte Datei im ASCII-Modus lesen möchtest.lubb hat geschrieben:Leider hat Python Probleme mit umlauten, und überall in der Zeilen wo umlauten ind wird die Zeichen falsch geliefert.
da hast du recht man soll die richtige Codierung einstellen./me hat geschrieben:Das kann man so nicht stehen lassen, denn Python hat keine Probleme mit Umlauten. Ich vermute eher, dass du eine UTF-8-codierte Datei im ASCII-Modus lesen möchtest.lubb hat geschrieben:Leider hat Python Probleme mit umlauten, und überall in der Zeilen wo umlauten ind wird die Zeichen falsch geliefert.
ich habe in der erste Zeile
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
für die Deutsche Codierung trotzdem hat nicht geklappt.
hier ist die Erklärung http://www.python-forum.de/post-56356.html#56356
wie kann ich jetzt die Codierung einstellen
Das hat nichts damit zu tun, wie die Daten aus einer Datei gelesen werden.lubb hat geschrieben:da hast du recht man soll die richtige Codierung einstellen.
ich habe in der erste ZeileCode: Alles auswählen
# -*- coding: iso-8859-1 -*-
für die Deutsche Codierung trotzdem hat nicht geklappt.
Schau dir mal das codecs-Modul an.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das encoding-Cookie ist nur dazu da, dem Interpreter mitzuteilen, wie die Python-Datei kodiert ist, d.h. der Interpreter ist damit z.B. in der Lage Umlaute in String-Literalen zu bearbeiten ohne sich zu verschlucken.
Es hat nichts, ich wiederhole: NICHTS, mit den Daten zu tun, die das Modul bearbeitet.
Die Loesung ist, wie /me schon angedeutet hat, `codecs.open` statt `open` zu nutzen oder eben von Hand die (Byte-)Strings zu decodieren.
Es hat nichts, ich wiederhole: NICHTS, mit den Daten zu tun, die das Modul bearbeitet.
Die Loesung ist, wie /me schon angedeutet hat, `codecs.open` statt `open` zu nutzen oder eben von Hand die (Byte-)Strings zu decodieren.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@HWK: Ähm, das funktioniert so gar nicht. Schau Dir noch mal an was `lines` und was `line` ist und *was* der originale Code damit macht. Wenn Du normale "slice"s verwenden willst, müsstest Du zum Beispiel erst einmal *alle* Zeilen in den Speicher lesen. Das vermeidet der alte Quelltext mit der Schleife und dem Test und meine Variante davon mit `islice()`.
Vielen Dank für die großartige und sehr Hilfsreiche Informationen vielen dank für eure Beiträge.
Die Lösung:
Weitere Infoamtionen findet Ihr unter:
Die Lösung:
Code: Alles auswählen
import os
import codecs
import locale
def ProductProof(self, fName,saleCount, product):
preferred_file_encoding = locale.getpreferredencoding()
i=0
produktOK=False
fWrite = open("report.txt", "a")
fEOC=codecs.open(fName, 'rU', preferred_file_encoding)
for line in fEOC:
i+=1
typ=line[643:646]
print typ
if 1 < i < saleCount:
if product!=typ:
produktOK=True
display="WARNING: Product not found in Sale "
display+= str(i)
display+="\n"
fWrite.write(display)
if produktOK==False:
fWrite.write("produkt OK"+"\n")
fEOC.close()
fWrite.close()
Code: Alles auswählen
http://www.python-forum.de/post-56356.html#56356
http://www.python-forum.de/viewtopic.php?p=72814&sid=2e617ad52d6513486cfc421b1c5dd87d
Ja, das kann man so machen.lubb hat geschrieben:Code: Alles auswählen
preferred_file_encoding = locale.getpreferredencoding() [...] fEOC=codecs.open(fName, 'rU', preferred_file_encoding)
Wenn du aber weißt, in welcher Codierung die Datei vorliegt, dann ist es sicher besser, das Encoding direkt anzugeben statt es aus der aktuellen Einstellung des Systems zu entnehmen.
Code: Alles auswählen
fEOC = codecs.open(fName, 'rU', "UTF-8")
Ähm, Du hast natürlich völlig Recht: lines != line.BlackJack hat geschrieben:@HWK: Ähm, das funktioniert so gar nicht. Schau Dir noch mal an was `lines` und was `line` ist und *was* der originale Code damit macht. Wenn Du normale "slice"s verwenden willst, müsstest Du zum Beispiel erst einmal *alle* Zeilen in den Speicher lesen. Das vermeidet der alte Quelltext mit der Schleife und dem Test und meine Variante davon mit `islice()`.
MfG
HWK