#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
. Однако у меня возникла другая проблема, при которой код не будет считывать текстовый файл, который я ввожу, когда меня спрашивают о пути к файлу. Вероятно, мне придется отредактировать свой пост, чтобы получить некоторые предложения о том, как исправить эту ошибку.