Ошибка атрибута Python: объект «список» не имеет атрибута «rstrip»

#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. Я могла бы заплакать и оттого, что это было так просто, и от благодарности. Спасибо!