Reading column names alone in a csv file

前端 未结 9 2254
不思量自难忘°
不思量自难忘° 2020-12-23 18:58

I have a csv file with the following columns:

id,name,age,sex

Followed by a lot of values for the above columns. I am trying to read the column names alone and

相关标签:
9条回答
  • 2020-12-23 19:27

    I am just mentioning how to get all the column names from a csv file. I am using pandas library.

    First we read the file.

    import pandas as pd
    file = pd.read_csv('details.csv')
    

    Then, in order to just get all the column names as a list from input file use:-

    columns = list(file.head(0))
    
    0 讨论(0)
  • 2020-12-23 19:27

    I literally just wanted the first row of my data which are the headers I need and didn't want to iterate over all my data to get them, so I just did this:

    with open(data, 'r', newline='') as csvfile:
    t = 0
    for i in csv.reader(csvfile, delimiter=',', quotechar='|'):
        if t > 0:
            break
        else:
            dbh = i
            t += 1
    
    0 讨论(0)
  • 2020-12-23 19:28

    You can read the header by using the next() function which return the next row of the reader’s iterable object as a list. then you can add the content of the file to a list.

    import csv
    with open("C:/path/to/.filecsv", "rb") as f:
        reader = csv.reader(f)
        i = reader.next()
        rest = list(reader)
    

    Now i has the column's names as a list.

    print i
    >>>['id', 'name', 'age', 'sex']
    

    Also note that reader.next() does not work in python 3. Instead use the the inbuilt next() to get the first line of the csv immediately after reading like so:

    import csv
    with open("C:/path/to/.filecsv", "rb") as f:
        reader = csv.reader(f)
        i = next(reader)
    
        print(i)
        >>>['id', 'name', 'age', 'sex']
    
    0 讨论(0)
  • 2020-12-23 19:29

    Though you already have an accepted answer, I figured I'd add this for anyone else interested in a different solution-

    • Python's DictReader object in the CSV module (as of Python 2.6 and above) has a public attribute called fieldnames. https://docs.python.org/3.4/library/csv.html#csv.csvreader.fieldnames

    An implementation could be as follows:

    import csv
    
    with open('C:/mypath/to/csvfile.csv', 'r') as f:
        d_reader = csv.DictReader(f)
    
        #get fieldnames from DictReader object and store in list
        headers = d_reader.fieldnames
    
        for line in d_reader:
            #print value in MyCol1 for each row
            print(line['MyCol1'])
    

    In the above, d_reader.fieldnames returns a list of your headers (assuming the headers are in the top row). Which allows...

    >>> print(headers)
    ['MyCol1', 'MyCol2', 'MyCol3']
    

    If your headers are in, say the 2nd row (with the very top row being row 1), you could do as follows:

    import csv
    
    with open('C:/mypath/to/csvfile.csv', 'r') as f:
        #you can eat the first line before creating DictReader.
        #if no "fieldnames" param is passed into
        #DictReader object upon creation, DictReader
        #will read the upper-most line as the headers
        f.readline()
    
        d_reader = csv.DictReader(f)
        headers = d_reader.fieldnames
    
        for line in d_reader:
            #print value in MyCol1 for each row
            print(line['MyCol1'])
    
    0 讨论(0)
  • 2020-12-23 19:37

    Thanking Daniel Jimenez for his perfect solution to fetch column names alone from my csv, I extend his solution to use DictReader so we can iterate over the rows using column names as indexes. Thanks Jimenez.

    with open('myfile.csv') as csvfile:
    
        rest = []
        with open("myfile.csv", "rb") as f:
            reader = csv.reader(f)
            i = reader.next()
            i=i[1:]
            re=csv.DictReader(csvfile)
            for row in re:
                for x in i:
                    print row[x]
    
    0 讨论(0)
  • 2020-12-23 19:40

    The csv.DictReader object exposes an attribute called fieldnames, and that is what you'd use. Here's example code, followed by input and corresponding output:

    import csv
    file = "/path/to/file.csv"
    with open(file, mode='r', encoding='utf-8') as f:
        reader = csv.DictReader(f, delimiter=',')
        for row in reader:
            print([col + '=' + row[col] for col in reader.fieldnames])
    

    Input file contents:

    col0,col1,col2,col3,col4,col5,col6,col7,col8,col9
    00,01,02,03,04,05,06,07,08,09
    10,11,12,13,14,15,16,17,18,19
    20,21,22,23,24,25,26,27,28,29
    30,31,32,33,34,35,36,37,38,39
    40,41,42,43,44,45,46,47,48,49
    50,51,52,53,54,55,56,57,58,59
    60,61,62,63,64,65,66,67,68,69
    70,71,72,73,74,75,76,77,78,79
    80,81,82,83,84,85,86,87,88,89
    90,91,92,93,94,95,96,97,98,99
    

    Output of print statements:

    ['col0=00', 'col1=01', 'col2=02', 'col3=03', 'col4=04', 'col5=05', 'col6=06', 'col7=07', 'col8=08', 'col9=09']
    ['col0=10', 'col1=11', 'col2=12', 'col3=13', 'col4=14', 'col5=15', 'col6=16', 'col7=17', 'col8=18', 'col9=19']
    ['col0=20', 'col1=21', 'col2=22', 'col3=23', 'col4=24', 'col5=25', 'col6=26', 'col7=27', 'col8=28', 'col9=29']
    ['col0=30', 'col1=31', 'col2=32', 'col3=33', 'col4=34', 'col5=35', 'col6=36', 'col7=37', 'col8=38', 'col9=39']
    ['col0=40', 'col1=41', 'col2=42', 'col3=43', 'col4=44', 'col5=45', 'col6=46', 'col7=47', 'col8=48', 'col9=49']
    ['col0=50', 'col1=51', 'col2=52', 'col3=53', 'col4=54', 'col5=55', 'col6=56', 'col7=57', 'col8=58', 'col9=59']
    ['col0=60', 'col1=61', 'col2=62', 'col3=63', 'col4=64', 'col5=65', 'col6=66', 'col7=67', 'col8=68', 'col9=69']
    ['col0=70', 'col1=71', 'col2=72', 'col3=73', 'col4=74', 'col5=75', 'col6=76', 'col7=77', 'col8=78', 'col9=79']
    ['col0=80', 'col1=81', 'col2=82', 'col3=83', 'col4=84', 'col5=85', 'col6=86', 'col7=87', 'col8=88', 'col9=89']
    ['col0=90', 'col1=91', 'col2=92', 'col3=93', 'col4=94', 'col5=95', 'col6=96', 'col7=97', 'col8=98', 'col9=99']
    
    0 讨论(0)
提交回复
热议问题