I just checked in a change to the csv.DictReader class. The fieldnames argument to the constructor is now optional. Any time the reader's next() method is called when self.fieldnames is None, the row read will be assigned to it and another row returned. This means the programmer doesn't need to know the fieldnames ahead of time. Skip