Problem mit Listen und Vergleich von Strings

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.
Antworten
SiWi
User
Beiträge: 4
Registriert: Samstag 29. September 2007, 11:01

Samstag 29. September 2007, 11:15

Mit dem Modul BeatifulSoup parse ich eine Website. Dabei speichere ich verschiedene Strings in einer Liste. Diese unicode strings wandle ich zuerst in Standard Strings um. Nun will ich testen ob die Strings ein - sind. Mein Code:

Code: Alles auswählen

import urllib2
from BeautifulSoup import BeautifulSoup
wurls=['http://www.coh-stats.com/factions/british/weapons/leeenfield.html']
while i < len(wurls):    
    page = urllib2.urlopen(wurls[i])
    soup = BeautifulSoup(page)
    soup.prettify()
    a=soup.findAll('td')   
    weaponb = [[a[11].contents[0]],[a[18].contents[0]],[a[71].contents[0]],[a[85].contents[0]],[a[74].contents[0]]]
while i < len(weaponb):
       weaponb[i] = map(str,weaponb[i])
       i = i +1
Wenn ich nun print weaponb mache bekomme ich folgende Ausgabe:
[['3-2.5'], ['0.3-0.1'], ['2-1.5'], ['-'], ['-']]
Mache ich nun aber

Code: Alles auswählen

print weaponb[4]=='-'
bekomme ich false. Wieso?
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Samstag 29. September 2007, 11:22

Weil weaponb[4] nicht '-'. sondern ['-'] ist.
BlackJack

Samstag 29. September 2007, 11:50

Die Elemente werden auch ganz unnötigerweise in Zeile 9 in Listen verpackt. Die Zeile liesse sich inklusive Umwandlung der Elemente in Zeichenketten auch viel einfacher als "list comprehension" ausdrücken:

Code: Alles auswählen

    weaponb = [str(a[i].contents[0]) for i in (11, 18, 71, 85, 74)]
Und aus der äusseren ``while``-Schleife sollte man eine ``for``-Schleife über `wurls` machen, dann spart man sich den Index.

Code: Alles auswählen

for wurl in wurls:
    page = urllib2.urlopen(wurl)
    # ...
Antworten