25

I am reading data from a CSV file (xyz.CSV) which contains below data:

col1,col2,col3,col4
name1,empId1,241682-27638-USD-CIGGNT ,1
name2,empId2,241682-27638-USD-OCGGINT ,1
name3,empId3,241942-37190-USD-GGDIV ,2
name4,empId4,241942-37190-USD-CHYOF ,1
name5,empId5,241942-37190-USD-EQPL ,1
name6,empId6,241942-37190-USD-INT ,1
name7,empId7,242066-15343-USD-CYJOF ,3
name8,empId8,242066-15343-USD-CYJOF ,3
name9,empId9,242066-15343-USD-CYJOF ,3
name10,empId10,241942-37190-USD-GGDIV ,2

When I am iterating it with a loop I am able to print the data row wise and and only column1 data by the below code.

file=open( path +"xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[0]
    print t

By the above code I can only get the first column.

If I try to print line[1] or line[2] it gives me the below error.

    file=open( path +"xyz.CSV", "r")
    reader = csv.reader(file)
    for line in reader:
        t=line[1],[2]
        print t

t=line[1],line[2]
IndexError: list index out of range

Please suggest for printing the data of column2 or column3.

3
  • Consider using csv.reader. Commented Nov 13, 2014 at 7:21
  • Does the csv file also contains xyz.CSV col1,col2,col3,col4. If that is the case then first line contains only one element i.e. ['xyz.CSV'] and then when you try to access [1] onwards it fails. Commented Nov 13, 2014 at 7:23
  • 1
    Possible duplicate of How do I read and write CSV files with Python? Commented Jan 11, 2017 at 7:45

10 Answers 10

33

Here is how I've got 2nd and 3rd columns:

import csv

path = 'c:\\temp\\'

file=open( path +"xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[1],line[2]
    print(t)

Here is the results:

('col2', 'col3')
('empId1', '241682-27638-USD-CIGGNT ')
('empId2', '241682-27638-USD-OCGGINT ')
('empId3', '241942-37190-USD-GGDIV ')
('empId4', '241942-37190-USD-CHYOF ')
('empId5', '241942-37190-USD-EQPL ')
('empId6', '241942-37190-USD-INT ')
('empId7', '242066-15343-USD-CYJOF ')
('empId8', '242066-15343-USD-CYJOF ')
('empId9', '242066-15343-USD-CYJOF ')
('empId10', '241942-37190-USD-GGDIV ')
Sign up to request clarification or add additional context in comments.

Comments

7

Although it's a pretty old question, just want to share my suggestion. Found it easier to read csv using pandas in a dataframe and access the data.

import pandas

df = pandas.read_csv('<path/to/your/csv/file>')

print(df)
#OUTPUT
#     col1     col2                       col3  col4
#0   name1   empId1   241682-27638-USD-CIGGNT      1
#1   name2   empId2  241682-27638-USD-OCGGINT      1
#2   name3   empId3    241942-37190-USD-GGDIV      2
#3   name4   empId4    241942-37190-USD-CHYOF      1
#4   name5   empId5     241942-37190-USD-EQPL      1
#5   name6   empId6      241942-37190-USD-INT      1
#6   name7   empId7    242066-15343-USD-CYJOF      3
#7   name8   empId8    242066-15343-USD-CYJOF      3
#8   name9   empId9    242066-15343-USD-CYJOF      3
#9  name10  empId10    241942-37190-USD-GGDIV      2

#you can access any column using

df['col2']
#OUTPUT
#0     empId1
#1     empId2
#2     empId3
#3     empId4
#4     empId5
#5     empId6
#6     empId7
#7     empId8
#8     empId9
#9    empId10
#Name: col2, dtype: object


#Or print a specific value using
df['col2'][0]

Update: I was mainly using Pandas in my project so found it easier to just use it to read the csv as well. There are other dedicated libraries available to read CSV (creating your own CSV reader should also be few lines of code).

2 Comments

There is a standard library (csv) for this kind of tasks. Pandas is a dependency of 46MB with native libraries. If you use it in other parts of the project, ok, but just for this tasks of reading a CSV is a very bad practice
@4lberto I was using using pandas in the project so didn't really explored other dedicated libraries. Answer updated as per your suggestion.
4

Your first line only has one column, so the process fails and doesn't continue. To solve, just skip first row

>>> with open( path, "r") as file:
...     reader = csv.reader(file)
...     for idx,line in enumerate(reader):
...         if idx>0:
...             t=line[1],line[2]
...             print t
... 
('empId1', '241682-27638-USD-CIGGNT ')
('empId2', '241682-27638-USD-OCGGINT ')
('empId3', '241942-37190-USD-GGDIV ')
('empId4', '241942-37190-USD-CHYOF ')
('empId5', '241942-37190-USD-EQPL ')
('empId6', '241942-37190-USD-INT ')
('empId7', '242066-15343-USD-CYJOF ')
('empId8', '242066-15343-USD-CYJOF ')
('empId9', '242066-15343-USD-CYJOF ')
('empId10', '241942-37190-USD-GGDIV ')

Comments

1

Hope it clears the issue

import csv
file=open( "xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[0]+","+line[1]
    print (t)

2 Comments

No it give the same Error as IndexError: list index out of range.
Strange!Its working fine on my machine. What are you assigning to t exactly?
1

you can also read csv data without importing pandas and csv

with open('testdata.csv', 'r') as f:
    results = []
    for line in f:
            words = line.split(',')
            results.append((words[0], words[1:]))
    print (results)

Comments

1

To read and write in a text file in Python, you can use the below syntax:

f = open('helloworld.txt', 'r')
message = f.read()
print(message)
f.close()


f = open('helloworld.txt', 'w')
f.write('hello world')
f.close()

To read the CSV file, follow the below code:

results = []
with open("C:/Users/Prateek/Desktop/TA Project/data1.csv") as inputfile:
    for line in inputfile:
    results.append(line.strip().split(','))

Comments

0
import csv
csv_file=open("xyz.csv", "r")
reader = csv.reader(csv_file)

for row in reader:
    print(" ".join(row[:2]))

Output :- 
col1 col2
name1 empId1
name2 empId2
name3 empId3
name4 empId4
name5 empId5
name6 empId6
name7 empId7
name8 empId8
name9 empId9
name10 empId10

Just put value in row as slice. Below is code for printing 2nd and 3rd coloumn.

import csv
csv_file=open("xyz.csv", "r")
reader = csv.reader(csv_file)

for row in reader:
    print(" ".join(row[1:3]))

output:
col2 col3
empId1 241682-27638-USD-CIGGNT 
empId2 241682-27638-USD-OCGGINT 
empId3 241942-37190-USD-GGDIV 
empId4 241942-37190-USD-CHYOF 
empId5 241942-37190-USD-EQPL 
empId6 241942-37190-USD-INT 
empId7 242066-15343-USD-CYJOF 
empId8 242066-15343-USD-CYJOF 
empId9 242066-15343-USD-CYJOF 
empId10 241942-37190-USD-GGDIV 

Comments

0

There is a simple method you can check out more at: Python CSV Docs

with open(filename, 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
        for row in spamreader:
            data.append(row)

Comments

0

You can use tablebase.

Step 1: Open and store your CSV file.

import tablebase
MyTable = tablebase.CsvTable("<path/to/your/csv/file>")

Step 2: Get your column.

print(MyTable.get_col("ColumnName"))

This will return a list of your column content.

Comments

-2

load the preprocessed CSV data

data_preprocessed = pd.read_csv('file_name.csv')

1 Comment

As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.