Last value of yield statement

Paul Hankin paul.hankin at gmail.com
Wed Oct 10 14:04:52 CEST 2007


On Oct 10, 11:19 am, Shriphani <shripha... at gmail.com> wrote:
> Hello all,
>
> Let us say I have a function like this:
>
> def efficientFiller(file):
>         worthless_list = []
>         pot_file = open(file,'r')
>         pot_file_text = pot_file.readlines()
>         for line in pot_file_text:
>                 if line.find("msgid") != -1:
>                         message_id = shlex.split(line)[1]
>                         if message_id in dictionary:
>                                 number = pot_file_text.index(line)
>                                 corresponding_crap =
> dictionary.get(message_id)
>                                 final_string = 'msgstr' + " " + '"' +
> corresponding_crap + '"' + '\n'
>                                 pot_file_text[number+1] = final_string
>                                 yield pot_file_text
>
> efficient_filler =  efficientFiller("libexo-0.3.pot")
> new_list = list(efficient_filler)
> print new_list
>
> I want to plainly get the last value the yield statement generates.
> How can I go about doing this please?

If you want only one value, you should be using return rather than
yield. What do you think your code does - and what is it supposed to
do? If it's not doing what it's supposed to be doing, it's better to
understand why not rather than try to patch up the output.

I'm going to guess that you want to take the lines of a file, and
after every line of the form 'msgid K' insert a line 'msgstr "..."'
when K is in some dictionary you've got. I'll assume you want the new
lines as a generator rather than as a list.

Then, something like (untested)

def lookup_msgids(filename):
    """Yield lines from the given file, with 'msgstr' lines added
       after 'msgid' lines when the id is in the id dictionary."""
    for line in open(filename, 'r'):
        yield line
        if line.startswith('msgid'):
            msgid = shlex.split(line)[1]
            if msgid in dictionary:
                yield 'msgstr "%s"\n' % dictionary[msgid]


libexo_pot = list(lookup_msgids('libexo-0.3.pot'))
print libexo_pot

--
Paul Hankin




More information about the Python-list mailing list