[Tutor] If/elif/else when a list is empty
aeneas24 at priest.com
aeneas24 at priest.com
Tue Sep 14 06:46:36 CEST 2010
Hi Vince,
Thanks very much for the one-line version--unfortunately, I still get errors. The overall script runs over every text file in a directory, but as soon as it hits a text file without a <genre> tag, it gives this error:
Traceback (most recent call last):
File "C:\Users\tylersc\Desktop\Tyler2\Tyler\words_per_review_IMDB_9-13-10.py", line 168, in <module>
main(".","output.csv")
File "C:\Users\tylersc\Desktop\Tyler2\Tyler\words_per_review_IMDB_9-13-10.py", line 166, in main
os.path.walk(top_level_dir, reviewDirectory, writer )
File "C:\Python26\lib\ntpath.py", line 259, in walk
func(arg, top, names)
File "C:\Users\tylersc\Desktop\Tyler2\Tyler\words_per_review_IMDB_9-13-10.py", line 162, in reviewDirectory
reviewFile( dirname+'/'+fileName, args )
File "C:\Users\tylersc\Desktop\Tyler2\Tyler\words_per_review_IMDB_9-13-10.py", line 74, in reviewFile
rgenre = re.split(r';', rf.info["genre"])
KeyError: 'genre'
I'm about to give what may be too much information--I really thought there must be a way to say "don't choke if you don't find any rgenres because rf.info["genre"] was empty". But maybe I need to define the "None" condition earlier?
Basically a text file has this structure:
<info>
<title>High Noon</title>
<genre>Drama;Western</genre> # But this tag doesn't exist for all text files
# etc
</info>
<review>
<author>u493498</author>
<rating>9 out of 10</rating>
<summary>A great flick</summary>
<text>blah blah blah</text>
# etc
</review>
# next review--all about the movie featured in the info tags
-----Original Message-----
From: Vince Spicer <vince at vinces.ca>
To: aeneas24 at priest.com
Cc: tutor at python.org
Sent: Mon, Sep 13, 2010 9:08 pm
Subject: Re: [Tutor] If/elif/else when a list is empty
On Mon, Sep 13, 2010 at 9:58 PM, <aeneas24 at priest.com> wrote:
Hi,
I'm parsing IMDB movie reviews (each movie is in its own text file). In my script, I'm trying to extract genre information. Movies have up to three categories of genres--but not all have a "genre" tag and that fact is making my script abort whenever it encounters a movie text file that doesn't have a "genre" tag.
I thought the following should solve it, but it doesn't. The basic question is how I say "if genre information doesn't at all, just make rg1=rg2=rg3="NA"?
rgenre = re.split(r';', rf.info["genre"]) # When movies have genre information they store it as <genre>Drama;Western;Thriller</genre>
if len(rgenre)>0:
if len(rgenre)>2:
rg1=rgenre[0]
rg2=rgenre[1]
rg3=rgenre[2]
elif len(rgenre)==2:
rg1=rgenre[0]
rg2=rgenre[1]
rg3="NA"
elif len(rgenre)==1:
rg1=rgenre[0]
rg2="NA"
rg3="NA"
else len(rgenre)<1: # I was hoping this would take care of the "there is no genre information" scenario but it doesn't
rg1=rg2=rg3="NA"
This probably does a weird nesting thing, but even simpler version I have tried don't work.
Thanks very much for any help!
Tyler
_______________________________________________
Tutor maillist - Tutor at python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
Hey Tyler you can simplify this with a onliner.
rg1, rg2, rg3 = rgenre + ["NA"]*(3-len(rgenre[:3]))
Hope that helps, if you have any questions feel free to ask.
Vince
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100914/22227a90/attachment.html>
More information about the Tutor
mailing list