2013-07-18 4 views
2

Я боюсь получать строковые значения в массив в python. У меня есть файл, длиной около 30К записей, и каждая строка выглядит следующим образом:Запись записей строки в csv в массив в python?

0R1, Sn = 0,3М, Sm = 0,7 М, Sx = 1,5М

Мне не нужна часть 0R1; все, что мне нужно, это все значения Sn в одном массиве, значения Sm в другом, а Sx в другом (конечно, я еще не понял, как я собираюсь получить числовые значения из строки еще, но Я подумаю об этом позже). Сейчас я пытаюсь сделать массив строк, я полагаю.

Вот мой код:

fname = '\\pathname...\\WXT51003.txt' 
f1 = open(fname, 'r') 

import csv 
import numpy 
from numpy import zeros 
reader = csv.reader(f1) 
Max = zeros((29697,1), dtype = numpy.str) 
Mean = zeros((29697,1), dtype = numpy.str) 
Min = zeros((29697,1), dtype = numpy.str) 
for i, row in enumerate(reader): 
    Min[i] = row[1] 
    Mean[i] = row[2] 
    Max[i] = row[3] 

f1.close() 
print Min[0:10] 

Выход оператора печати представляет собой массив с «S» в каждой строке. Как получить его для чтения всей строки, а не только первого символа?

+0

use dtype «S8» или какой бы большой вам ни понадобились ваши строки ... или использовать dtype.object или что-то еще ... по умолчанию это будет тип строки len1 ... или не использовать numpy (поскольку вы имеете дело со строками в любом случае) –

+0

@JoranBeasle y будет работать, если разные строки имеют разные длины строк? Например, если у меня есть Sn = 0.3M, то у меня длина строки 7, но если это Sn = 10.1M, то это другая длина строки. –

+0

как lng, когда вы устанавливаете его на максимальную длину (см. Numpy docs about dtypes) –

ответ

3
reader = csv.reader(f1) 
rows = list(reader) 
cols = zip(*rows) 
Min = cols[1] 
Mean = cols[2] 
Max = cols[3] 


# or if you really want numpy.arrays 
Min = numpy.array(cols[1]) #dtype will be auto-assigned 
Mean = numpy.array(cols[2]) #dtype will be auto-assigned 
Max = numpy.array(cols[3]) #dtype will be auto-assigned 

как бы я это сделать ... (не использовать NumPy для этого ... по крайней мере пока)

, если вам нужно использовать NumPy затем использовать DTYPE из «S8» или однако большой вам нужны ваши строки ... или используйте dtype.object или что-то еще ... по умолчанию это будет тип строки len1 ... но на самом деле я не вижу причин использовать numpy здесь на основе вашего фрагмента кода.

+1

Я бы придерживался наименований OP. Здесь вы маскируете встроенные функции 'min()' и 'max()' Python'. –

+0

oops my bad ... (исправлено) –

+0

Хороший ответ. При желании вы можете переписать в oneliner '_, Min, Mean, Max = zip (* csv.reader (f1))', который работает в Python 3. –

Смежные вопросы