Безумные библиотеки ATBS с Python, использующие регулярные выражения

#python #python-3.x

Вопрос:

Я работаю над проектом «Безумные библиотеки» в ATBS. Программа должна считывать текстовые файлы и позволять пользователю добавлять свой собственный текст в любом месте, где в текстовом файле появляется «ПРИЛАГАТЕЛЬНОЕ», «СУЩЕСТВИТЕЛЬНОЕ», «НАРЕЧИЕ» или «ГЛАГОЛ».

Код, который у меня есть до сих пор, выглядит следующим образом:

 import os, re   NewFile=input('Please enter the path of the file to be used:')  NewFilepath=os.path.abspath(NewFile)  print(NewFilepath)  if os.path.exists(NewFilepath)==True:   open(NewFile, 'a')  else:   print('This file does not exist. Creating a new file.')  open(NewFile, 'w')   NewFileContent=NewFile.read()   def NewMadLibs():   SpeechParts=re.compile(r'ADJECTIVE|NOUN|ADVERB|VERB', re.I)  match=re.findall(NewFileContent)  for match in NewFileContent:   if match=='ADJECTIVE':   adjective=input('Enter an adjective:n')  SpeechParts.sub(adjective, 'ADJECTIVE')  if match=='NOUN':   noun=input('Enter a noun:n')  SpeechParts.sub(noun, 'NOUN')  if match=='ADVERB':   adverb=input('Enter an adverb:n')  SpeechParts.sub(adverb, 'ADVERB')  if match=='VERB':   verb=input('Enter a verb:n')  SpeechParts.sub(verb, 'VERB')   NewMadLibs(NewFileContent)  UserMadLibsFile=NewFileContent.read()  print(UserMadLibsFile)  new_FileName='new_' 'source.txt'  new_file=open(new_FileName, 'w')  new_file.write(UserMadLibsFile)  new_file.close()  print("The file is saved as 'new_source.txt'")  

Появившееся сообщение об ошибке выглядит следующим образом:

 Traceback (most recent call last):  File "/Users/myname/Documents/MadLibsNewTry.py", line 16, in lt;modulegt;  NewFileContent=NewFile.read()  AttributeError: 'str' object has no attribute 'read'  

Меня смущает эта ошибка, потому что я открываю новый файл либо в режиме добавления, либо в режиме записи в зависимости от того, существует ли файл (путь) уже. Разве это не должно создавать или открывать «Новый файл», и это будет файловый объект, а не строка? Код не дошел до этого момента, но я подумал, что аналогичная ошибка возникнет для строки: UserMadLibsFile=NewFileContent.read() в последнем блоке.

Я открыт для любых предложений или других методов, которые я должен рассмотреть для решения этой практической проблемы.

Комментарии:

1. Вам нужно сохранить возвращенный файловый объект open() и использовать его для ввода-вывода файлов, как показано в нижней части кода new_file . Вызов open() не меняет NewFile строку на файловый объект.

2. @sj95126 Большое тебе спасибо. Я вижу ошибку и понимаю, что забыл сохранить файл, возвращенный open() в переменной, точно так же, как я сделал для new_file . Однако у меня возникла другая проблема, при которой код не будет считывать текстовый файл, который я ввожу, когда меня спрашивают о пути к файлу. Вероятно, мне придется отредактировать свой пост, чтобы получить некоторые предложения о том, как исправить эту ошибку.