Obtain the raw line of text read by CSVDictReader when reporting errors?

MRAB python at mrabarnett.plus.com
Wed Sep 21 16:52:48 EDT 2016


On 2016-09-21 21:28, Malcolm Greene wrote:
> Looking for ideas on how I can obtain the raw line of text read by a
> CSVDictReader. I've reviewed the CSV DictReader documentation and there
> are no public attributes that expose this type of data.
>
> My use case is reporting malformed lines detected when my code
> validates the dict of data returned by this object. I would like to log
> the actual line read by the CSVDictReader, not the processed data
> returned in the dict.
>
You could put something between the file and the reader, like this:

import csv

class MyFile:
     def __init__(self, file):
         self.file = file

     def __iter__(self):
         return self

     def __next__(self):
         self.line = next(self.file)

         return self.line

path = '<path to csv>'

with open(path) as file:
     my_file = MyFile(file)
     reader = csv.DictReader(my_file)

     for row in reader:
         print(repr(my_file.line), '=>', row)




More information about the Python-list mailing list