我在這裏搜索了這個錯誤,但還沒有看到任何與我的情況相匹配的東西(聲明,我仍然習慣於Python
)。Python - 'str'對象沒有屬性'append'
import os
os.chdir("C:\Projects\Rio_Grande\SFR_Checking") # set working directory
stressPeriod = 1
segCounter = 1
inFlow = 0
outFlow = 0
with open(r"C:\Projects\streamflow.dat") as inputFile:
inputList = list(inputFile)
while stressPeriod <= 1:
segCounter = 1
lineCounter = 1
outputFile = open("stats.txt", 'w') # Create the output file
for lineItem in inputList:
if (((stressPeriod - 1) * 11328) + 8) < lineCounter <= (stressPeriod * 11328):
lineItem = lineItem.split()
if int(lineItem[3]) == int(segCounter) and int(lineItem[4]) == int(1):
inFlow = lineItem[5]
outFlow = lineItem[7]
lineItemMem = lineItem
elif int(lineItem[3]) == int(segCounter) and int(lineItem[4]) <> int(1):
outFlow = lineItem[7]
else:
gainLoss = str(float(outFlow) - float(inFlow))
lineItemMem.append(gainLoss)
lineItemMem = ','.join(lineItemMem)
outputFile.write(lineItemMem + "\n") # write # lines to file
segCounter += 1
inFlow = lineItem[5]
outFlow = lineItem[7]
lineCounter += 1
outputFile.close()
所以基本上這個程序應該讀.dat文件,並從中解析出的信息bits
。我將文件的每一行分成一個列表,在其上執行一些math
(數學運算在文件的不同行之間,這增加了代碼的複雜性)。然後,我將一個新的數字追加到列表的末尾,這是事情莫名其妙的地方。我得到以下錯誤:
Traceback (most recent call last):
File "C:/Users/Chuck/Desktop/Python/SFR/SFRParser2.py", line 49, in <module>
lineItemMem.append(gainLoss)
AttributeError: 'str' object has no attribute 'append'
當我給它一個打印命令測試lineItemMem
實際上是一個列表,而不是一個字符串,它打印的清單給我。如果我在代碼
lineItemMem.split(",")
打破字符串,我得到一個錯誤說,list
對象沒有屬性split
。所以基本上,當我嘗試執行list
操作時,該錯誤說明其爲string
,當我嘗試執行字符串操作時,錯誤表示它是一個列表。我已經嘗試了一點點,但坦率地說不清楚問題在這裏。感謝您的任何見解。
字符串是不可變的。 –
'type(lineItemMem)'是什麼? – ppperry