Row count in a csv file

Question:

I am probably making a stupid mistake, but I can’t find where it is. I want to count the number of lines in my csv file. I wrote this, and obviously isn’t working: I have row_count = 0 while it should be 400. Cheers.

f = open(adresse,"r")
reader = csv.reader(f,delimiter = ",")
data = [l for l in reader]
row_count = sum(1 for row in reader)

print row_count
Asked By: Dirty_Fox

||

Answers:

with open(adresse,"r") as f:
    reader = csv.reader(f,delimiter = ",")
    data = list(reader)
    row_count = len(data)

You are trying to read the file twice, when the file pointer has already reached the end of file after saving the data list.

Answered By: jamylak

First you have to open the file with open

input_file = open("nameOfFile.csv","r+")

Then use the csv.reader for open the csv

reader_file = csv.reader(input_file)

At the last, you can take the number of row with the instruction ‘len’

value = len(list(reader_file))

The total code is this:

input_file = open("nameOfFile.csv","r+")
reader_file = csv.reader(input_file)
value = len(list(reader_file))

Remember that if you want to reuse the csv file, you have to make a input_file.fseek(0), because when you use a list for the reader_file, it reads all file, and the pointer in the file change its position

Answered By: protti

If you are working with python3 and have pandas library installed you can go with

import pandas as pd

results = pd.read_csv('f.csv')

print(len(results))
# with built in libraries
opened_file = open('f.csv')
from csv import reader

read_file = reader(opened_file)
apps_data = list(read_file)

rowcount = len(apps_data) #which incudes header row

print("Total rows incuding header: " + str(rowcount))
Answered By: MuraliK

Simply Open the csv file in Notepad++. It shows the total row count in a jiffy. 🙂
Or
in cmd prompt , Provide file path and key in the command
find c v “some meaningless string” Filename.csv

Answered By: user12838023

I would consider using a generator. It would do the job and keeps you safe from MemoryError of any kind

def generator_count_file_rows(input_file):
    for row in open(input_file,'r'):
        yield row

And then

for row in generator_count_file_rows('very_large_set.csv'):
        count+=1
Answered By: hellbreak

The important stuff is hidden in comments section of solution which is marked correct.

Re-sharing ErdÅ‘s-Bacon’s solution here for better visibility.

Why ?
Because: It saves lot of memory without having to create list.

So I think it is better do this way


def read_raw_csv(file_name):
    with open(file_name, 'r') as file:
        csvreader = csv.reader(file)

        # count number of rows
        entry_count = sum(1 for row in csvreader)
        print(entry_count-1)  # -1 is for discarding header row.

Checkout this link for more info

Answered By: Shakeel
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.