#python
#питон
Вопрос:
def readFile(CHARACTERS_FILE): try: charactersFile = open(CHARACTERS_FILE, "r") lines = charactersFile.readlines() buffer = [lines] charactersFile.close except: print("An error occured.") for index in range(len(buffer)): buffer[index] = buffer[index].rstrip('n') print(buffer) return buffer
Всегда возвращает следующую ошибку:
AttributeError: 'list' object has no attribute 'rstrip'
Мне не везет с выводом этих новых строк. Помочь??
Комментарии:
1.
buffer
это список-из-списков. Вы не можете вызвать rstrip() в списке, в точности как указано в ошибке.2. Вы также не обращаетесь
.close()
к файлу. Вы помещаете атрибут, но на самом деле не закрываете его.3. Зачем ты это сделал
buffer = [lines]
?
Ответ №1:
Основная проблема, с которой вы столкнулись, заключается в том, что вы вкладываете свой lines
список в новый список из одного элемента buffer
. Это кажется ненужным, и это вызывает ваше исключение, когда вы пытаетесь получить доступ к строкам, но вместо этого получаете список.
Попробуйте либо:
buffer = charactersFile.readlines() # if you don't need lines at all
или:
lines = charactersFile.readlines() buffer = list(lines) # if you want buffer to be a shallow copy of lines
Ответ №2:
buffer = [lines]
снимите скобки, чтобы buffer = lines
. Таким образом, это больше не список, и вы можете выполнять свою строковую операцию. У меня тоже была борьба с такого рода ошибками.
Вот несколько кодов, которые вы можете попробовать
buffer = [] # to create the list # no need for close later. for good practice use 'with' with open(CHARACTERS_FILE, "r") as file: lines = file.readlines() for x in lines: # x will be each str of your lines.list buffer.append(x) # and like this you add them to buffer # the string operation you planed later # could be done before appending though but try it yourself
Комментарии:
1. Я могла бы заплакать и оттого, что это было так просто, и от благодарности. Спасибо!