2017-02-14 5 views
-2

У меня есть CSV-файл с данными в формате:Чтение файла CSV для преобразования строки плавать

Row 1:

[-0.74120803 0.6338942 ],[-1.01583889 0.20901699],[-1.02969154 0.14459244],[ 0.10362657 0.31347394],[ 1.69977092 -0.13384537],[ 1.39789431 -0.52155783],[ 0.02928792 0.24156825],[-1.03616494 0.33943 ],[ 0.84921822 0.47879992],[ 0.279905 0.96184517],[ 0.43602597 -0.27275052],[ 1.4766132 -0.48128695],[ 0.96219625 -0.44950686],[ 0.24356381 -0.0253022 ],[ 0.09346193 0.07808998],[ 0.26571546 -0.1678716 ],[ 0.03055046 1.05913456],[ 1.94137487e+00 -1.57339675e-03],[ 0.22311559 0.98762516],[ 2.00176133 0.13017485],...... 

Следует отметить, что данные из двух рядов: первый строка содержит координаты x и y, а вторая строка содержит свой флаг.

Row 2

0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,1,....... 

Я хочу, чтобы хранить данные в 3 списках: x, y и flag. Благодарим вас за помощь в этой части.

+5

Пожалуйста, разместите код, с которого вы начали, и точную проблему, с которой вы работаете, чтобы мы могли помочь вам отладить. –

+0

Цитаты против форматирования кода, большая разница – Dan

+0

Какая версия Python вы используете, 2 или 3? – martineau

ответ

1
row1 = '[-0.74120803 0.6338942 ],[-1.01583889 0.20901699],[-1.02969154 0.14459244],[ 0.10362657 0.31347394],[ 1.69977092 -0.13384537],[ 1.39789431 -0.52155783],[ 0.02928792 0.24156825],[-1.03616494 0.33943 ],[ 0.84921822 0.47879992],[ 0.279905 0.96184517],[ 0.43602597 -0.27275052],[ 1.4766132 -0.48128695],[ 0.96219625 -0.44950686],[ 0.24356381 -0.0253022 ],[ 0.09346193 0.07808998],[ 0.26571546 -0.1678716 ],[ 0.03055046 1.05913456],[ 1.94137487e+00 -1.57339675e-03],[ 0.22311559 0.98762516],[ 2.00176133 0.13017485]' 
row2 = '0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1' 

l = [] 

for xy, flag in zip(row1.split(','), row2.split(',')): 
    x, y = xy.strip('[] ').split(' ') 
    l.append((float(x), float(y), int(flag))) 

print l 

Если вы предпочитаете 3 отдельных списков:

row1 = '[-0.74120803 0.6338942 ],[-1.01583889 0.20901699],[-1.02969154 0.14459244],[ 0.10362657 0.31347394],[ 1.69977092 -0.13384537],[ 1.39789431 -0.52155783],[ 0.02928792 0.24156825],[-1.03616494 0.33943 ],[ 0.84921822 0.47879992],[ 0.279905 0.96184517],[ 0.43602597 -0.27275052],[ 1.4766132 -0.48128695],[ 0.96219625 -0.44950686],[ 0.24356381 -0.0253022 ],[ 0.09346193 0.07808998],[ 0.26571546 -0.1678716 ],[ 0.03055046 1.05913456],[ 1.94137487e+00 -1.57339675e-03],[ 0.22311559 0.98762516],[ 2.00176133 0.13017485]' 
row2 = '0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1' 

listX, listY = [], [] 

for xy in row1.split(','): 
    x, y = xy.strip('[] ').split(' ') 
    listX.append(float(x)) 
    listY.append(float(y)) 

listFlag = [int(flag) for flag in row2.split(',')] 

print listX, listY, listFlag 
1

Два один-лайнеры будут делать:

flags = [int(x) for x in row2.split(',')] 
x, y = zip(*((float(value) for value in entry[1:-1].split()) for entry in row1.split(','))) 

Сейчас:

print(flags[:5]) 
print(list(x[:5])) 
print(list(y[:5])) 

Выход:

[0, 0, 0, 1, 1] 
[-0.74120803, -1.01583889, -1.02969154, 0.10362657, 1.69977092] 
[0.6338942, 0.20901699, 0.14459244, 0.31347394, -0.13384537] 
Смежные вопросы