Я искал эту ошибку здесь, но не видел ничего, что еще соответствует моей ситуации (отказ от ответственности, я до сих пор привык к 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