None column in csv (csv python module)
Question: An instrument create a CVS with this on the file header :

    
    
    XLabel,Wavenumber
    YLabel,Response
    FileType,Single Beam
    DisplayDirection,20300
    PeakDirection,20312
    0.000000,-1.149420,-1.177183,-1.174535
    0.964406,-1.053002,-1.083787,-1.069919
    1.928811,-0.629619,-0.652436,-0.628358
    

I want to read this value with cvs python module.

    
    
    import csv
    expfile='test.csv'
    with open(expfile) as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if (i<4):
                i += 1
            else:
                print(row)
    

The output is :

    
    
    {None: ['-1.025449', '-1.049773'], 'XLabel': '0.000000', 'Wavenumber': '-1.012466'}
    {None: ['-1.256103', '-1.297049'], 'XLabel': '0.964406', 'Wavenumber': '-1.254550'}
    {None: ['-0.722499', '-0.754096'], 'XLabel': '1.928811', 'Wavenumber': '-0.735748'}
    

It is easy to get `Xlabel` or `Wavenumber` value :

    
    
    print(row['XLabel'])
    

But how can I get the `None` value?


Answer: Just use `None` as the key:

    
    
    print(row[None])
    

`None` is simply the value for the `restkey` argument to `DictReader()`, and
`None` is the default. You could set it to something else. It is the key into
which any _extra_ columns that don't have a fieldname are collected into, and
in your case the fieldnames are taken from the first row in the file, which
has only two fields.

A better option would be to explicitly pass in some fieldnames:

    
    
    reader = csv.DictReader(csvfile, fieldnames=('Field1', 'Field2', 'Field3', 'Field4'))
    

because the first row of that format is not really suitable to act as labels
for the columns past the first 5 rows. You can pick names that make sense for
those 4 columns.

Note you'd have to skip _5_ rows then, not 4. See [Python CSV reader to skip 9
headers](http://stackoverflow.com/questions/28603014/python-csv-reader-to-
skip-9-headers) for an alternative technique where you don't have to keep a
counter:

    
    
    from itertools import islice
    import csv
    
    expfile='test.csv'
    
    with open(expfile) as csvfile:
        reader = csv.DictReader(csvfile, fieldnames=('Field1', 'Field2', 'Field3', 'Field4'))
        next(islice(reader, 5, 5), None)
        for row in reader:
            print(row)
    

