Convert from CSV to array in Python

I have a CSV file containing the following.

0.000264,0.000352,0.000087,0.000549
0.00016,0.000223,0.000011,0.000142
0.008853,0.006519,0.002043,0.009819
0.002076,0.001686,0.000959,0.003107
0.000599,0.000133,0.000113,0.000466
0.002264,0.001927,0.00079,0.003815
0.002761,0.00288,0.001261,0.006851
0.000723,0.000617,0.000794,0.002189

I want convert the values into an array in Python and keep the same order (row and column). How I can achieve this?

I have tried different functions but ended with error.

Upvotes: 11

Views: 118732

Answers (4)

James Buck
James Buck

Reputation: 1640

If your file doesn't contain parentheses

with open('input.csv') as f:
    output = [float(s) for line in f.readlines() for s in line[:-1].split(',')]
print(output)

Upvotes: 3

pbies
pbies

Reputation: 742

For broader usage:

#!/usr/bin/env python3

from pprint import pprint

result = []
delim=','
rows=0

for line in open("input_file.csv"):
    line=line.strip()
    row=line.split(delim)
    result.append(row)
    rows=rows+1

cols=len(row)

pprint(result)
print('rows: '+str(rows))
print('cols: '+str(cols))

# you get array of rows consisting of array of columns, all text

or if you want integers:

#!/usr/bin/env python3

from pprint import pprint

result = []
delim=','
rows=0

for line in open("input_file.csv"):
    line=line.strip()
    row=line.split(delim)
    newrow=[]
    for col in row:
        newrow.append(int(col))
    result.append(newrow)
    rows=rows+1

cols=len(row)

pprint(result)
print('rows: '+str(rows))
print('cols: '+str(cols))

# you get array of rows consisting of array of columns, all integers

Simply change int(col) to float(col) to get floats.

You should get:

[[0.000264, 0.000352, 8.7e-05, 0.000549],
 [0.00016, 0.000223, 1.1e-05, 0.000142],
 [0.008853, 0.006519, 0.002043, 0.009819],
 [0.002076, 0.001686, 0.000959, 0.003107],
 [0.000599, 0.000133, 0.000113, 0.000466],
 [0.002264, 0.001927, 0.00079, 0.003815],
 [0.002761, 0.00288, 0.001261, 0.006851],
 [0.000723, 0.000617, 0.000794, 0.002189]]
rows: 8
cols: 4

Upvotes: -1

Monkeyanator
Monkeyanator

Reputation: 1416

The csv module was created to do just this. The following implementation of the module is taken straight from the Python docs.

import csv 
with open('file.csv','rb') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',', quotechar='|') 
    for row in reader:
        #add data to list or other data structure

The delimiter is the character that separates data entries, and the quotechar is the quotechar.

Upvotes: 2

MattDMo
MattDMo

Reputation: 102922

You should use the csv module:

import csv

results = []
with open("input.csv") as csvfile:
    reader = csv.reader(csvfile, quoting=csv.QUOTE_NONNUMERIC) # change contents to floats
    for row in reader: # each row is a list
        results.append(row)

This gives:

[[0.000264, 0.000352, 8.7e-05, 0.000549], 
[0.00016, 0.000223, 1.1e-05, 0.000142], 
[0.008853, 0.006519, 0.002043, 0.009819], 
[0.002076, 0.001686, 0.000959, 0.003107], 
[0.000599, 0.000133, 0.000113, 0.000466], 
[0.002264, 0.001927, 0.00079, 0.003815], 
[0.002761, 0.00288, 0.001261, 0.006851], 
[0.000723, 0.000617, 0.000794, 0.002189]]

Upvotes: 20

Related Questions