Python CSV writer confusion.

Larry Bates larry.bates at websafe.com
Thu Sep 15 12:05:34 EDT 2005


The someiterable should be something that has a .next
method.  That would be a list or any object with such a
method.  In your case it would be the images list.
The writer method will iterate over the list and write
everything out for you.  Don't put it inside a loop
yourself.  More like (not tested):

import csv
.
.
.
outfile=open(r'D:\path\to\filename_sort1.csv', 'w')
CSVwriter=csv.writer(outfile, dialect='excel', delimiter='|')
CSVwriter.writerows(images)


Larry Bates
>
>
> if __name__ == '__main__':
>     images = read_images(r"D:\path\to\imagespipe.csv")
>
>     def get_key(*attr_names):
>         def key(image):
>             return [getattr(image, name) for name in attr_names]
>         return key
>
>     images.sort(key = get_key("filename"))
>
>     t = open(r'D:\path\to\filename_sort1.csv', 'w')
>
>     for image in images:
>         print book
>         #t.write('%s\n' % book)     %Before I needed | delimited, this
> worked
>         #csv.writer(t, dialect='excel', delimiter='|')
>         output = csv.writer(t, dialect='excel', delimiter='|')
>         output.writerows()
>         #output.writerows(image)
>         #output.writerow(image)
>
>         t.close()


-Larry Bates


googleboy wrote:
> Hi.  I am trying to write out a csv file with | instead of comma,
> because I have a field that may have many commas in it.  I read in a
> csv file, sort it,  and want to write it out again.
> 
> I read the example that says:
> 
> import csv
> writer = csv.writer(open("some.csv", "wb"))
> writer.writerows(someiterable)
> 
> The "someiterable" is what is confusing me.
> 
> 
> 
> class Image(object):
>     def __init__(self, title, date, genre, data, value, filename):
>         params = locals()
>         del params['self']
>         self.__dict__.update(params)
>     def __repr__(self):
>         all_items = self.__dict__.items()
>         return '%s,%s,%s,%s,%s, %s' % (self.title, self.date,
> self.genre, self.data, self.value, self.filename)
> 
> def read_images(filename):
>     csv_file = open(filename, "rb")
>     reader = csv.reader(csv_file, dialect='excel', delimiter='|')
>     images = [Image(*[field.strip() for field in row]) for row in
> reader]
>     csv_file.close()
>     return books
> 
> def sort_images(filename, *attr_names):
>     csv_file = open(filename, "rb")
>     reader = csv.reader(csv_file, dialect='excel', delimiter='|')
> 
> 
> if __name__ == '__main__':
>     images = read_images(r"D:\path\to\imagespipe.csv")
> 
>     def get_key(*attr_names):
>         def key(image):
>             return [getattr(image, name) for name in attr_names]
>         return key
> 
>     images.sort(key = get_key("filename"))
> 
>     t = open(r'D:\path\to\filename_sort1.csv', 'w')
> 
>     for image in images:
>         print book
>         #t.write('%s\n' % book)     %Before I needed | delimited, this
> worked
>         #csv.writer(t, dialect='excel', delimiter='|')
>         output = csv.writer(t, dialect='excel', delimiter='|')
>         output.writerows()
>         #output.writerows(image)
>         #output.writerow(image)
> 
>         t.close()
> 
> 
> 
> This returns an error that says "Error: sequence expected"
> 
> My understanding of this is that I am creating a list of lists and I am
> iterating over it (for image in images),  and that image is a list, and
> is therefore iterable...?
> 
> I am a bit new at this, and would greatly appreciate any assistance.
> 
> TIA
> 
> googleboy
> 



More information about the Python-list mailing list