2012-08-09 322 views
1

當我運行這段代碼時,遇到下面的錯誤,我是編程新手,我知道我有一堆無用的數組。我不知道我的錯誤在哪裏,因爲我已經將j聲明爲一個數組。我完全沒有想法。'int'object has no attribute'append'

import pyodbc,nltk,array,re,itertools 
cnxn = pyodbc.connect('Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=information_schema;User=root; Password=1234;Option=3;') 
cursor = cnxn.cursor() 
cursor.execute("use collegedatabase ;") 
cursor.execute("select * from sampledata ; ") 
cnxn.commit() 
s=[] 
j=[] 
x=[] 
words = [] 
w = [] 
sfq = [] 
POS=[] 
wnl = nltk.WordNetLemmatizer() 
p = [] 
clean= [] 
l =[] 
tupletolist= [] 
results = [] 
aux = [] 
regex = re.compile("\w+\.") 
pp = [] 
array1=[] 

f = open("C:\\Users\\vchauhan\\Desktop\\tupletolist.txt","w") 
for entry in cursor: 
    s.append(entry.injury_type),j.append(entry.injury_desc) 

def isAcceptableChar(character): 
    return character not in "[email protected]#$%^&*()_+`1234567890-={}|:<>?[]\;',/." 


from nltk.tokenize import word_tokenize 
from nltk.corpus import stopwords 
english_stops = set(stopwords.words('english')) 
for i in range(0,200): 
    j.append(filter(isAcceptableChar, j[i])) 
    w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops]) 
    for j in range (0,len(w[i])): 
     results = regex.search(w[i][j]) 
      if results: 
       str.rstrip(w[i][j],'.') 
for a in range(0 , 200): 
    sfq.append(" ".join(w[a])) 

from nltk.stem import LancasterStemmer 
stemmer = LancasterStemmer() 

for i in range (0,200): 
    pp.append(len(w[i])) 

for a in range (0,200): 
    p.append(word_tokenize(sfq[a])) 
    POS.append([wnl.lemmatize(t) for t in p[a]]) 
    x.append(nltk.pos_tag(POS[a])) 
    clean.append((re.sub('()[\]{}'':/\-[(",)]','',str(x[a])))) 
    cursor.execute("update sampledata SET POS = ? where SRNO = ?", (re.sub('()[\]{}'':/\-[(",)]','',str(x[a]))), a) 

for i in range (0,len(array1)): 
    results.append(regex.search(array1[i][0])) 
    if results[i] is not None: 
     aux.append(i) 

f.write(str(w)) 

例外:

Traceback (most recent call last): 
    File "C:\Users\vchauhan\Desktop\regexsolution_try.py", line 37, in <module> 
    j.append(filter(isAcceptableChar, j[i])) 
AttributeError: 'int' object has no attribute 'append' 
+3

看起來你有一個實際的教訓,爲什麼不使用單字母變量名。 – 2012-08-09 06:44:13

+0

@gnibbler是的,我做了 – 2012-08-09 18:35:53

回答

2

j已被用於列表以及整數。 僅對整數名稱使用j,將列表命名爲其他內容。

j.append(filter(isAcceptableChar, j[i])) # j is not a list here,it is an int. 
w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops]) 
for j in range (0,len(w[i])):    # here j is an int 
+0

謝謝你的建議工作絕對好! – 2012-08-09 18:18:19

1

你的縮進被打破,但似乎這是此行是罪魁禍首:

for j in range (0,len(w[i])): 

第一次,j是一個數組,但然後你用int j來隱藏它。很難發現,因爲導致錯誤的原因似乎是在之後發生了,但由於它處於循環狀態,這不是真的。嘗試重命名此整數。

+0

謝謝你的建議工作絕對好! – 2012-08-09 18:37:07

1

您似乎在循環中使用變量'j'作爲int計數器,即列表'j'被int'j'替換,您無法在其中添加任何內容。解決方案:用更復雜的名稱重命名變量...

+0

謝謝你的建議工作絕對好! – 2012-08-09 18:35:16

1

採取在下面這段代碼的密切關注:

for i in range(0,200): 
    j.append(filter(isAcceptableChar, j[i])) 
    w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops]) 
    for j in range (0,len(w[i])): 

通知上j呼叫.append(你曾與前面的列表初始化)您第一次,然後用它作爲循環變量嵌套在同一個循環中。

在代碼中使用更好的,有意義的變量名來避免這類錯誤。重命名循環變量或模塊級別列表變量。

+0

謝謝你的建議工作絕對好! – 2012-08-09 18:18:46

相關問題