Home > Enterprise >  Converting CSV into Array in Python
Converting CSV into Array in Python

Time:02-22

I have a csv file like below. A small csv file and I have uploaded it enter image description here

I am trying to convert csv values into array.

My expectation output like

enter image description here

My solution

results = []
with open("Solutions10.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)

but I am getting a

ValueError: could not convert string to float: ' [1'

CodePudding user response:

There is a problem with your CSV. It's just not csv (coma separated values). To do this you need some cleaning:

import re

# if you expect only integers
pattern = re.compile(r'\d ')
# if you expect floats (uncomment below)
# pattern = re.compile(r'\d \.*\d*')
result = []
with open(filepath) as csvfile:
    for row in csvfile:
        result.append([
            int(val.group(0))
            # float(val.group(0))
            for val in re.finditer(pattern, row)
        ])
        
print(result)

You can also solve this with substrings if it's easier for you and you know the format exactly.

Note: Also I see there is "eval" suggestion. Please, be careful with it as you can get into a lot of trouble if you scan unknown/not trusted files...

CodePudding user response:

You can do this:

with open("Solutions10.csv") as csvfile:
    result = [eval(k) for k in csvfile.readlines()]

Edit: Karl is cranky and wants you todo this:

with open("Solutions10.csv") as csvfile:
    result = []
    for line in csvfile.readlines():
        line = line.replace("[","").replace("]","")
        result.append([int(k) for k in line.split(",")]

But you're an the programmer so you can do what you want. If you trust your input file eval is fine.

  • Related