Head over to the Scripting tab, create a new python file and paste this code (of course change <your path to> to your locations):
import bpy
import csv
with open('<your path to>/rgb.csv') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
currline = -1
for row in reader:
currline += 1
if currline == 0: # ignore header line
print(f'columns: {" ".join(row)}')
continue
r = float(row[0])
g = float(row[1])
b = float(row[2])
volume = 10 # span cubes in space
bpy.ops.mesh.primitive_cube_add(
enter_editmode = False,
size = 1,
align = 'WORLD',
location = (r * volume, g * volume, b * volume), # use (r g b) for (x y z)
scale = (1, 1, 1)
)
bpy.context.active_object.name = 'row ' + str(currline) # name cube with data row
mat = bpy.data.materials.new(name = str(r) + ',' +str(g) + ',' + str(b)) # name mat with (r g b)
mat.diffuse_color = (r, g, b, 1)
bpy.context.active_object.data.materials.append(mat)
With a test .csv layouted like so
r,g,b,
0.1,0.1,1,
0.1,0.2,1,
0.1,0.3,1,
0.6,0.1,0.4,
0.7,0.1,0.2,
0.1,0.1,0.5,
you get the following result:

Edit: diffuse_color is only the color in the viewport, which may raise confusion. Changing the "real" color takes a bit more like described here.