简体   繁体   中英

How to get specific columns in a certain range from a csv file without using pandas

For some reason the pandas module does not work and I have to find another way to read a (large) csv file and have as Output specific columns within a certain range (eg first 1000 lines). I have the code that reads the entire csv file, but I haven't found a way to display just specific columns.

Any help is much appreciated!

import csv
fileObj = open('apartment-data-all-4-xaver.2018.csv')
csvReader = csv.reader( fileObj )
for row in csvReader:
 print row
fileObj.close()

use csv dictreader and then filter out specific rows and columns

import csv
data = []
with open('names.csv', newline='') as csvfile:
     reader = csv.DictReader(csvfile)
     for row in reader:
           data.append(row)
colnames = ['col1', 'col2']
 for i in range(1000):
    print(data[i][colnames[0]], data[i][colnames[1]])

I created a small csv file with the following contents:

first,second,third
11,12,13
21,22,23
31,32,33
41,42,43

You can use the following helper function that uses namedtuple from collections module, and generates objects that allows you to access your columns like attributes:

import csv
from collections import namedtuple

def get_first_n_lines(file_name, n):
    with open(file_name) as file_obj:
        csv_reader = csv.reader(file_obj)
        header = next(csv_reader)
        Tuple = namedtuple('Tuple', header)

        for i, row in enumerate(csv_reader, start=1):
            yield Tuple(*row)
            if i >= n: break

If you want to print first and third columns, having n=3 lines, you use the method like this (Python 3.6 +):

for line in get_first_n_lines(file_name='csv_file.csv', n=3):
    print(f'{line.first}, {line.third}')

Or like this (Python 3.0 - 3.5):

for line in get_first_n_lines(file_name='csv_file.csv', n=3):
    print('{}, {}'.format(line.first, line.third))

Outputs:

11, 13
21, 23
31, 33

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM