Python Array только для чтения, не может добавлять значения - PullRequest
3 голосов
/ 30 октября 2009

Я новичок в Python. Следующий код вызывает ошибку при попытке добавить значения в массив. Что я делаю не так?

import re
from array import array

freq_pattern = re.compile("Frequency of Incident[\(\)A-Za-z\s]*\.*\s*([\.0-9]*)")
col_pattern = re.compile("([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)")
e_rcs = array('f')

f = open('example.4.out', 'r')

for line in f:
    print line,

    result = freq_pattern.search(line)
    if result:
        freq = float(result.group(1))

    cols = col_pattern.search(line)
    if cols:
        e_rcs.append = float(cols.group(2))

f.close()

Error

Traceback (последний последний вызов):
Файл "D: \ workspace \ CATS" Parser \ cats-post.py ", строка 31, в e_rcs.append = float (cols.group (2)) AttributeError: Атрибут объекта 'list' атрибуты только для чтения (присваивают .append)

Ответы [ 4 ]

6 голосов
/ 30 октября 2009

Вы назначаете функцию append (), вместо этого вы хотите вызвать .append (float (cols.group (2))).

6 голосов
/ 30 октября 2009

Хотите добавить в массив?

e_rcs.append( float(cols.group(2)) )

Делая это: e_rcs.append = float(cols.group(2)) заменяет append метод массива e-rcs на значение с плавающей точкой. Редко, что вы хотите сделать.

3 голосов
/ 30 октября 2009

append - это метод. Вы пытаетесь перезаписать это вместо того, чтобы называть это.

e_rcs.append(float(cols.group(2)))
0 голосов
/ 30 октября 2009

Попробуйте вместо этого:

import re

freq_pattern = re.compile("Frequency of Incident[\(\)A-Za-z\s]*\.*\s*([\.0-9]*)")
col_pattern = re.compile("([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)")
e_rcs = [] # make an empty list

f = open('example.4.out', 'r')

for line in f:
    print line,

    result = freq_pattern.search(line)
    if result:
        freq = float(result.group(1))

    cols = col_pattern.search(line)
    if cols:
        e_rcs.append( float(cols.group(2)) ) # add another float to the list

f.close()

В Python вы можете использовать array.array только тогда, когда вам нужно контролировать двоичную структуру вашего хранилища, то есть простой массив байтов в оперативной памяти.

Если вы собираетесь много анализировать научные данные, вам следует взглянуть на модуль NumPy , который поддерживает n-мерные массивы. Думайте о NumPy как о замене FORTRAN в математике и анализе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...