Anfängerfrage zu re.compile

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.
BlackJack

@sveni_lee: Ich meine Unterschiede zwischen den Einträgen die erfasst werden und denen die nicht erfasst werden. Das Programm stoppt *nicht* wegen den fehlenden Einträgen für Episode, Staffel, und Episodentitel.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

ja, das hatte ich schon verstanden... (glaube ich zumindest)

Aber es werden alle nachfolgenden Einträge nicht mehr ausgelesen....
BlackJack

@sveni_lee: Ja aber *warum* nicht? Worin unterscheiden die sich von denen die ausgelesen werden? Und ich kann das auch nicht nachvollziehen, bei mir wird bis zum letzten <li>-Eintrag alles erfasst.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

der Unterschied ist,

'episode': parse_number(node.find('span', 'epg_ep')),
'episode_title': episode_title_node.text if episode_title_node else None,
'season': parse_number(node.find('span', 'epg_st')),

nicht vorhanden sind und mit None ausgegeben werden....

Code: Alles auswählen

<li id="e_121" style="display:none;" style="display:none;"><table><colgroup><col width="65"><col width="12"><col width="475"><col width="70"></colgroup>
<tr><td rowspan="3" class="zeit">16.55 Uhr</td><td colspan="2" class="entry"><a href="/serie/funnymals" class="sendung b2">Funnymals</a><a href="http://www.wunschliste.de/kalender.pl?s=24884&ktermin_start=20160315T165500&ktermin_ende=20160315T173000&kid=201603151655014&sz=0&sender=&titel=" class="episode_kalender"><img src="/gfx/kal.gif" width="10" height="9" border="0" title="Zum Kalender hinzufügen" class="kalsprite"></a></td><td rowspan="2" style="background-color:#ffffff;"><img src="/gfx/logos/14.gif" class="stationslogo" alt="SRF 1 (Schweiz)" title="SRF 1 (Schweiz)"><img src="/gfx/flaggen/flagge_ch.png" alt="Schweiz" title="Schweiz" class="linkflag"></td></tr>
<tr><td rowspan="2"></td><td>FUNNYMALS</a></td></tr>
BlackJack

@sveni_lee: Noch mal: Interessant ist der Unterschied zwischen Daten die erfasst werden und welchen die nicht erfasst werden. Wobei das mit den Episodendaten kein wichtiger Unterschied ist, denn es werden ja ganz offensichtlich Datensätze mit und ohne Episodeninformationen gefunden, das kann also nicht der Unterschied sein der dazu führt das bei Dir nicht alles gefunden wird. Wenn die Episodendaten nicht vorhanden sind, dann wird halt `None` als Wert eingetragen von der Funktion. Das bewirkt in keinster Weise das danach nicht weitergesucht wird. Warum sollte es auch‽
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

Also Ich kann beim besten willen keinen unterschied feststellen außer den von mir genannten....

Ich habe noch einmal eine andere Frage...

und Zwar werden einige Sendernamen wie folgt angegeben...

AXN (Pay-TV)
Channel :ATV (Österreich)

damit ich die Kanäle mit meiner Datenbank abgleichen kann müssen die zusätze (Pay-TV) oder (Österreich) entfernt werden...
das ist eigendlich kein problem

Code: Alles auswählen

channel = re.compile('"stationslogo" alt="(.+?)"', re.DOTALL).findall(entry)[0]
channel = channel_raw.replace(' (Pay-TV)','').strip()
bei Österreich klappt das nicht, da kommt eine Fehlermeldung:
SyntaxError: Non-ASCII character '\xc3' in file G:\Test1.py on line 67, but no encoding declared;
Das sliegt ja daran, dass das "Channel" ascii kodiert ist aber meine versuche mit

Code: Alles auswählen

channel = channel.encode('utf-8')
bringen keine Abhilfe
BlackJack

@sveni_lee: Es muss ja irgendeinen Grund geben. Aber solange Du das Problem nicht nachvollziehbar zeigen kannst, kann man da halt nicht viel zu sagen.

Jetzt fängst Du ja schon wieder mit regulären Ausdrücken an… :roll:

Die Fehlermeldung bezieht sich auf Deinen Quelltext und hat nichts mit den Daten zu tun. Ausserdem ist das nicht die ganze Fehlermeldung. Lies die mal komplett und folge dem Link.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

ja, ich weiß... ist nicht schön bringt mir aber grad das bessere Ergebnis, da ich den "Fehler" nicht finden kann...

dem link bin gefolgt aber werde nicht wirklich schlau daraus...

da

Code: Alles auswählen

# -*- coding: utf-8 -*-
ja nicht unterstützt wird

und ein *.encode('utf-8') auch nicht funktioniert
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@sveni_lee: # -*- config: utf-8 funktioniert dann und nur dann, wenn die Datei, in der das steht, auch wirklich utf-8 kodiert ist. Dazu musst du deinen Editor entsprechend konfigurieren. Eine Datei, die, sagen wir in cp850 kodiert ist, wird nicht magisch zu einer in utf-8 kodierten Datei, bloß weil man das da reinschreibt.
In specifications, Murphy's Law supersedes Ohm's.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

@pillmuncher:

also Ich nutze SubLime Text 3

in meiner python.sublime-build steht folgendes:

Code: Alles auswählen

{
    "cmd": ["g:\\Python\\python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}
und wenn in der Konsole kommt folgendes

Code: Alles auswählen

c:\>chcp
Active Codepage: 850
also nicht uft-8

Nur wie kann ich das umstellen?

in sublime sollte es so gehen

Code: Alles auswählen

{
    "cmd": ["g:\\Python\\python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
    "encoding": "uft-8"
}
reicht das schon?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

sveni_lee hat geschrieben:

Code: Alles auswählen

{
    "cmd": ["g:\\Python\\python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
    "encoding": "uft-8"
}
reicht das schon?
Mit SublimeText kenne ich mich nicht aus, aber wenn, dann muss es utf-8 heißen, nicht uft-8.

Außerdem: selbst, wenn du die Datein dann mit SublimeText öffnest, ist sie immer noch in cp850 kodiert. Du musst vermutlich eine neue - leere - Datei erstellen, den Inhald der ursprünglichen Datei kopieren, in die neue Datei einfügen und unter dem richtigen Namen speichern. Am besten machst du auch ein Backup der alten Datei.
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@sveni_lee: Das hat nichts mit den Sublime-Einstellungen zu tun die Du da zeigst. Die Kodierung die in dem Kommentar angegeben wird, muss halt mit der Kodierung übereinstimmen in der die Datei abgespeichert wird. Das wiederum hat nichts mit der Kodierung zu tun die in einer Konsole verwendet wird. Du musst halt mal schauen wo Dir der Editor anzeigt welche Kodierung er für die Datei verwendet.

Edit: http://stackoverflow.com/a/20657899/3815611
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

hat leider nicht funktioniert...

aber trotzdem Danke...
BlackJack

@sveni_lee: Was hat nicht funktioniert? Es richtig zu machen? Doch, wenn man es richtig macht, dann funktioniert es auch. :-)
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

@BlackJack: sorry, Ich hatte deine Antwort und den Link nicht gesehen... Danke dafür.
In der Status zeile wird jetzt auch UTF-8 angezeigt. aber der Fehler bleibt.

folgendes:

ohne

Code: Alles auswählen

# -*- coding: utf-8 -*-

Code: Alles auswählen

SyntaxError: Non-ASCII character '\xc3' in file G:\Test1.py on line 68, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
mit

Code: Alles auswählen

# -*- coding: utf-8 -*-

Code: Alles auswählen

Traceback (most recent call last):
  File "G:\Test1.py", line 111, in <module>
    get_SerienSendetermine()		
  File "G:\Test1.py", line 68, in get_SerienSendetermine
    channel = channel.replace(' (Östrreich)','').strip()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
BlackJack

@sveni_lee: Das eine hat nichts mit dem anderen zu tun. Beim `SyntaxError` konnte der Compiler nichts mit dem Ö anfangen. Beim zweiten Fehler mischst Du Bytestrings und Unicode, was dazu führt das Python versucht implizit den Bytestring als ASCII zu dekodieren. Der ist aber kein ASCII, darum geht das nicht. Verwende ein Unicode-Zeichenliteral, also ein u vor der Zeichenkette: u' (Östrreich)'
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

ahhh...

okay, jetzt habe ich das verstanden...

klappt wunderbar - Danke...!
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

hier hat nicht zufällig jemand Ahnung von JSON RPC abfragen?

Ich versuche grad den Namen zu der imdbnumber aus meiner Kodi-Datenbank aufzulösen.
bekomme aber immer nur 0 angezeigt... Also denke ich das da noch irgendwo ein Fehler sein muss...

Code: Alles auswählen

def TVShowName2TVShowID(tvshowname):
    query = {
           "jsonrpc": "2.0",
           "method": "VideoLibrary.GetTVShowDetails",
            "params": {"limits": {"start": 0, "end": 200}},
            "id": 1
            }
    res = json.loads(xbmc.executeJSONRPC(json.dumps(query, encoding='utf-8')))
  
    if 'result' in res and 'tvshow' in res['result']:
        res = res['result'].get('tvshow')
        for tvshow in res:
            if tvshowname.lower () in tvshow['sorttitle'].lower():
                debug("SerienPlaner found  imdb-ID %s" % (tvshow['sorttitle']))
                return tvshow['imdbnumber']
    return 0
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

sveni_lee hat geschrieben:hier hat nicht zufällig jemand Ahnung von JSON RPC abfragen?
(...)
Das ist jetz eigentlich wieder eine eigenständige Frage und gehört nicht mehr zu 'Anfängerfrage zu re.compile'
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

Dake, neuen Tread erstellt...
Antworten