Jim,<div><br></div><div>The biggest thing that smells to me is the magic number '2'. I assume that's because you are assuming a header row since you are opening a DictReader, but still want to get the line number of the csv row.  Thankfully, csv readers expose the 'line_num' property, so you can get the line number of the file directly.</div>

<div><br></div><div>Also, while not 'smelly', the anonymous function (the lambda) can be cleaned up by using the standard library module fnmatch, which is specifically built for file matching.</div><div><br></div>

<div>You can also break up your combo opening the zip file and creating a DictReader in the for loop, which doesn't do anything other than making it look a little cleaner and makes it clearer at a glance what's going on.</div>

<div><br></div><div>Finally, since 'rU' is something you need to look up to understand, I put a comment so it makes it clear what the 'rU' is for.</div><div><br></div><div>With those revisions, here is the updated code:</div>

<div><br></div><div><div>import csv</div><div>import fnmatch</div><div>from zipfile import ZipFile</div><div><br></div><div>def foo(zipfilename):</div><div>    z = ZipFile(zipfilename)</div><div>    for filename in fnmatch.filter(z.namelist(), '*.xyz'):</div>

<div>        csvfile = z.open(filename, 'rU')  # Open with universal newline support</div><div>        csvreader = csv.DictReader(csvfile)</div><div>        for row in csvreader:</div><div>            print 'line_number:', csvreader.line_num, 'row:', row</div>

<div><br></div><div><br></div><div>-Eric</div><div><br></div><br><div class="gmail_quote">On Sun, Oct 21, 2012 at 10:46 PM,  <span dir="ltr"><<a href="mailto:jep200404@columbus.rr.com" target="_blank">jep200404@columbus.rr.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The following code smells. How would you improve it?<br>
<br>
import csv<br>
from zipfile import ZipFile<br>
<br>
def foo(filename):<br>
    z = ZipFile(filename)<br>
    for f in filter((lambda s: s.endswith('.xyz')), z.namelist()):<br>
        for line_number, row in enumerate(csv.DictReader(z.open(f, 'rU')), 2):<br>
            print 'line_number:', line_number, 'row:', row<br>
<br>
_______________________________________________<br>
CentralOH mailing list<br>
<a href="mailto:CentralOH@python.org">CentralOH@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/centraloh" target="_blank">http://mail.python.org/mailman/listinfo/centraloh</a><br>
</blockquote></div><br></div>