Wie Text aus einer Datei mit Python auslesen?

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mocca hat geschrieben: ..., da ich nicht weiss, ob es in python generell sowas wie ePixmap oder ePicLoad gibt.
Was genau ist das? (Domäne?)
ich benutze nämlich nen linux-receiver, der mit dem normalen pixmap aufruf nur 8bit png unterstützt (wie alle dreamboxen).
Was ist das? Receiver kenne ich vom TV-Empfang her ... "dreamboxen" sagt mir gar nix ;-)
TiKaey
User
Beiträge: 84
Registriert: Montag 24. November 2008, 20:48

Ich vermute mal, ein Linuxbasierter DVB-Receiver ist gemeint. :o)
http://de.wikipedia.org/wiki/Dreambox
BlackJack

@mocca: Zum skalieren von Bildern gibt's die `Python Imaging Library`, kurz `PIL`.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

ja, von der PIL habe ich gehört.
ist eine sammlung aus modulen, unter anderem JPEGImagePlugin.py

hab es mit mal runtergeladen, muss mich da aber mal durcharbeiten, weil ich noch nicht weiss, wie man die benutzt :oops:

hatte gehofft, dass das irgendwie einfacher lösbar ist, aber es scheitert schon am aufrufen eines jpeg, denn die werden ja nativ nicht unterstützt vom ePixmap. png kein problem, aber ich muss das nun umschreiben für jpeg.


zum alten thema nochmal kurz:
das erstellen der liste und dann konvertieren der liste in von mir gewünschte "optik" ;) hat bestens geklappt.
danke dafür.

gibts hier im forum einen bereich, wo man auch ein bisschen enigma2 basiert fragen kann?
das mit den bildern scheint nämlich kniffliger zu sein als gedacht.
viele klassen, wie MediaPixmap laden nämlich die bilder nicht so zuverlässig.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

sorry, dass ich den thread nochmal hochhole.

aber ich habe nun ja den string mit meinen objekten erzeugt.

nun musste ich aber heute bei nem testdurchlauf feststellen, dass es zu problemen kommt, wenn in diesen non-ascii code ist
'ascii' codec can't encode character u'\xed' in position 160: ordinal not in range(128)
kann ich den string filtern lassen, sodass alle nicht ascii zeichen entfernt werden oder noch besser, sodass all nicht ascii ersetzt werden (í zu i, é zu e etc.)?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Benutze mal die Suche im Forum nach Unicode und Fehler o.ä. Da findest Du eine Menge darüber, u.a. auch die Links zum wiki, wo das alles erklärt wird :-)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Vielleicht sollte man den Link über Unicode aus dem Wiki hier sticky machen, um so viele Fragen (die immer wieder die gleichen sind) über Unicode und Encodings vermeiden zu können.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

so, hab grad mal gesucht und im wiki das gefunden [wiki]Von Umlauten, Unicode und Encodings[/wiki]?highlight=%28unicode%29

nehme an, dass ich also nur umwandeln muss. kann ich irgendwie sehen in welches zielformat ich wandeln muss?
die xml sind laut header selbst utf-8.
aber da es zur fehlermeldung kam, nehme ich mal an, dass das system kein utf-8 unterstützt.
sehe ich das richtig?

also nach iso-8859-1 wandeln?

und muss ich den cookie setzen oder reicht es, wenn ich wandle und das system, falls es iso-8859-1 unterstützt kann das dann automatisch lesen?


EDIT:
gerade noch ein problem gefunden.

nutze folgenden code:

Code: Alles auswählen

currDir = os.getcwd()
tvnfo = os.path.join(currDir,'tv.nfo')
namelist = []
if os.path.exists(tvshownfo):
        # if currPlay is not None:
        tree = etree.parse(tvnfo)
        for actor in tree.findall('//actor'): 
                for name in actor.getiterator('role'):
                        namelist.append(name.text)
        namefinal = '\n'.join(namelist)
nur ist in der tv.nfo aber folgendes drin:
<actor>
<name>Not a regular</name>
<role />
<thumb>http://www.thetvdb.com/banners/actors/80669.jpg</thumb>
</actor>
das führt zu
rolefinal = '\n'.join(rolelist)
TypeError: sequence item 9: expected string, NoneType found
kann man ihn irgendwie dazu bringen solche fehler zu ignorieren?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Da gibts mehrere Möglichkeiten:

Code: Alles auswählen

# das fügt in der Ausgabe eine Leerzeile hinzu, vllt. ja erwünscht
...
namelist.append(name.text || '')
...


# fügt nur Text hinzu, kein leerer String oder None
# mit else könntest Du noch auf den fehlenden Eintrag hinweisen
...
for name in actor.getiterator('role'):
    if name.text:
        namelist.append(name.text)
...


# das ganze etwas anders gelöst
...
'\n'.join(i for i in namelist if i)
...

# oder mit hässlichem None
...
'\n'.join(str(i) for i in namelist)
...
Das Leben ist kein Wunschkonzert, Python schon eher ;)
BlackJack

Zeile 3 bleibt trotz allen Wünschens ein Syntaxfehler. :-P
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

upps, vllt. so dann:

Code: Alles auswählen

namelist.append(name.text or '')
:lol:
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

danke jerch. werd ich gleich mal ausprobieren!

das sieht ganz gut aus. würde das auch bei dem unicode fehler helfen oder wäre das damit nicht automatisch mit gelöst?

Code: Alles auswählen

for name in actor.getiterator('role'):
    if name.text:
        namelist.append(name.text)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

...würde das auch bei dem unicode fehler helfen oder wäre das damit nicht automatisch mit gelöst?
Nein, um das Ausgabe-Encoding mußt Du Dich schon selber kümmern. Da xml fast immer uft-8 kodiert daher kommt, dürfte es mit einem namefinal.encode('utf-8') getan sein.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

wollte nur kurz nochmal danke sagen!

das None type problem hat wunderbar geklappt.

und das encoding problem ebenfalls.

wie cih ja oben geschrieben hatte, war ich nicht sicher, ob ich ein cookie setzen muss (scheinbar nicht) und ob ich in das native encoding der box benutzen muss oder ob die box alles kann, solange man ihr sagt, dass es utf-8 ursprünglich war.

offensichtlich letzteres :)

danke euch!

ich bin sicher, dass ich den thread demnächst wieder hochhole....wäre zu einfach, wenn im rest keine fehler mehr auftauchen würden :D
Antworten