2009-10-30 3 views
3

Je suis nouveau sur Python. Le code suivant provoque une erreur lorsqu'il tente d'ajouter des valeurs à un tableau. Qu'est-ce que je fais mal?Python Array est en lecture seule, impossible d'ajouter des valeurs

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() 

Erreur

Traceback (most recent call last):
File "D:\workspace\CATS Parser\cats-post.py", line 31, in e_rcs.append = float(cols.group(2)) AttributeError: 'list' object attribute 'append' is read-only attributes (assign to .append)

Répondre

6

Vous assignez à la fonction append(), vous voulez au lieu d'appeler .append (flotteur (cols.group (2))).

+0

Bien sûr, erreur stupide, merci. –

6

Voulez-vous ajouter au tableau?

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

Faire ceci: e_rcs.append = float(cols.group(2)) remplace la méthode append du tableau e-rcs avec une valeur à virgule flottante. Rarement quelque chose que vous voulez faire.

+2

Il n'appelle pas une liste un tableau. Il utilise un tableau, à partir du module tableau qui fait partie de la bibliothèque standard de Python. – jamessan

+0

J'ai n flotteurs à stocker. Traditionnellement, j'utiliserais des tableaux dans d'autres langues. C'est ce que j'essaie d'utiliser en Python avec peu de succès. Quel type de données dois-je utiliser en Python? –

+0

@Jared Brown: les tableaux numpy sont très bien. Certaines personnes disent "array" lorsqu'elles utilisent le type "list" intégré. J'ai échoué à lire la partie tableau numpy au début. –

3

append est une méthode. Vous essayez de l'écraser au lieu de l'appeler.

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

Essayez ceci:

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() 

En Python vous utilisez uniquement array.array lorsque vous avez besoin de contrôler la mise en page binaire de votre stockage, à savoir un simple tableau d'octets dans la RAM.

Si vous allez faire beaucoup d'analyses de données scientifiques, alors vous devriez jeter un oeil au module NumPy qui prend en charge les tableaux multidimensionnels. Pensez à NumPy en remplacement de FORTRAN pour faire des mathématiques et des analyses de données.

Questions connexes