Awkward format string

attn.steven.kuo at gmail.com attn.steven.kuo at gmail.com
Wed Aug 1 15:57:20 EDT 2007


On Aug 1, 9:42 am, beginner <zyzhu2... at gmail.com> wrote:


(snipped)

>
> e is not complicated. It is a record that have 7 fields. In my program
> a function outputs a list of tuples, each is of type e, and now I just
> need to send them to a text file.
>
> I have no problem using classes and I do use them everywhere. But
> using classes does not solve my problem here. I will probably find
> myself doing:
>
> print  >>f, "%s\t%s\t%d\t%f\t%f\t%f\t%d" % (x.field1..strftime("%Y-%m-
> %d"), x.field2..strftime("%Y-%m-%d"), x.field3, x.field4, x.field5,
> x.field.6, x.field7)
>
> This is also tedious and error-prone.



You can implement a __str__ special method in a class.  You can
use 'type' to examine, well, the type of an object.  So:

from datetime import datetime

class PrettyDT(datetime):
    def __str__(self):
        return self.strftime('%Y-%m-%d')


e = (PrettyDT(2007, 8, 1), PrettyDT(2007, 8, 2),
        1, 2.0, 3.0, 4)

print '\t'.join(str(each) for each in e)


# Or even

format = { int: '%d', float: '%f', PrettyDT: '%s' }
format_string = '\t'.join(format[type(each)] for each in e)
print format_string % e;

--
Hope this helps,
Steven




More information about the Python-list mailing list