Python 是的,这是另一个'';str';对象没有属性';写';问题
这就是我的代码的样子Python 是的,这是另一个'';str';对象没有属性';写';问题,python,Python,这就是我的代码的样子 import re fileIN = str(open('instructions.txt', 'w+')) contents = re.sub('a', 'x', fileIN) fileIN.write(contents) 我希望此程序将文件“instructions.txt”中的字母“a”替换为字母“x”,如下所示: a ab abc 到 然后将结果保存在同一文件中。但是,当我运行它时,会收到以下错误消息: AttributeError: 'str' ob
import re
fileIN = str(open('instructions.txt', 'w+'))
contents = re.sub('a', 'x', fileIN)
fileIN.write(contents)
我希望此程序将文件“instructions.txt”中的字母“a”替换为字母“x”,如下所示:
a
ab
abc
到
然后将结果保存在同一文件中。但是,当我运行它时,会收到以下错误消息:
AttributeError: 'str' object has no attribute 'write'
我相信这是一个快速解决办法,但我就是找不到它
任何帮助都将不胜感激!如果我需要提供更多信息,请告诉我
(免责声明:请原谅我发布了一个非常常见的问题。我确实浏览了许多类似的帖子,但我找不到任何解决方案。我一周前刚开始学习python,我想也许我可以尝试编写一个小程序来帮我节省一些工作时间。遗憾的是,这适得其反,因为我花了太多时间试图找出答案这是我自己说的。)
(编辑:感谢所有评论和帮助我的人。我认为我的问题会被否决到地狱的深处,因为我认为这个问题太微不足道了。我觉得作为一个编码noob,我真的很受支持,我很高兴我有这样的经历。)你为什么使用str?:
with open('file', 'r') as f:
text = f.read()
with open('file', 'w') as f:
f.write(re.sub('a', 'x', text))
你为什么用str
with open('file', 'r') as f:
text = f.read()
with open('file', 'w') as f:
f.write(re.sub('a', 'x', text))
确保不要混淆文件对象和字符串:
import re
f = open('instructions.txt', 'w+')
contents = re.sub('a', 'x', f.read())
f.write(contents)
确保不要混淆文件对象和字符串:
import re
f = open('instructions.txt', 'w+')
contents = re.sub('a', 'x', f.read())
f.write(contents)
您正在打开一个文件:
open('instructions.txt', 'w+')
然后立即将其转换为字符串,而不首先保存对文件对象的引用,并保存对文件字符串内容的引用:
fileIN = str(...)
然后在此字符串中执行替换:
contents = re.sub('a', 'x', fileIN)
试着写点什么
fileIN.write(contents)
fileIN
在任何时候都不是对文件对象的引用。它只是一个无法写入的字符串。如果要保持对文件对象的访问,请保存对它的引用,而不是合并所有内容:
fileIN = open('instructions.txt', 'w+')
contents = fileIN.read()
contents = re.sub('a', 'x', contents)
然后,您将能够在打开文件时写入
fileIN
引用的文件对象:
open('instructions.txt', 'w+')
然后立即将其转换为字符串,而不首先保存对文件对象的引用,并保存对文件字符串内容的引用:
fileIN = str(...)
然后在此字符串中执行替换:
contents = re.sub('a', 'x', fileIN)
试着写点什么
fileIN.write(contents)
fileIN
在任何时候都不是对文件对象的引用。它只是一个无法写入的字符串。如果要保持对文件对象的访问,请保存对它的引用,而不是合并所有内容:
fileIN = open('instructions.txt', 'w+')
contents = fileIN.read()
contents = re.sub('a', 'x', contents)
然后,您将能够写入由
fileIN
引用的文件对象。它告诉您在字符串对象上没有方法write。您需要在文件对象上调用write
fileIN = open('instructions.txt', 'w+')
contents = fileIN.read()
fileIN.write(re.sub('a', 'x', contents))
它告诉您字符串对象上没有方法write。您需要调用file对象上的write
fileIN = open('instructions.txt', 'w+')
contents = fileIN.read()
fileIN.write(re.sub('a', 'x', contents))
无需为此
导入re
。内置的replace()
即可
with open("instructions.txt", "r+") as f:
data = f.read().replace("a","x")
f.seek(0)
f.write(data)
无需为此
导入re
。内置的replace()
即可
with open("instructions.txt", "r+") as f:
data = f.read().replace("a","x")
f.seek(0)
f.write(data)
你认为
fileIN.write(contents)
有什么作用?fileIN
应该是字符串吗?如果是,为什么你希望它有一个write()
属性?如果不是,为什么你要给它分配一个字符串?它没有读到下面答案描述的较大错误,但我怀疑“w+”
不是您想要使用的文件模式。任何“w”
模式都会立即截断文件,这使得尝试读取其内容有点无用。我想如果您要编写然后稍后重新读取文件的某些部分,它可能会很有用,但这不是您要做的。您可能需要“r+”
,它不会截断,并允许您以任何顺序读写。您可能希望在读写之间进行自己的截断(以防新内容比旧内容短)。一般注意:如果您正在处理非常大的文件,并且一次只需要编辑一行,请避免使用f.read()
。f.read()
在处理之前将整个文件读取到内存中,如果文件大小与可用RAM大致相同,则可能会冻结您的电脑。选择使用类似于的解决方案,将open(filename,“r”)作为f:for line in f:#尽可能对该行进行处理
为了公平起见,for line in f:
也可能“冻结您的电脑”如果文件不包含换行符,您认为fileIN.write(contents)
有什么作用?fileIN
是否应该是字符串?如果是,为什么希望它有write()
attribute?如果不是,为什么要给它指定一个字符串?下面的答案所描述的更大的错误不会被读取,但我怀疑“w+”
不是您想要使用的文件模式。任何“w“
模式将立即截断文件,这使得尝试读取其内容有点无用。我认为如果您要编写文件的某些部分,然后在以后重新读取,它可能会很有用,但这不是您要做的。您可能需要“r+”
,它不会截断,并允许您以任何顺序读写。您可能希望在读写之间进行自己的截断(以防新内容比旧内容短)。一般注意:如果您正在处理非常大的文件,并且一次只需要编辑一行,请避免使用f.read()
。f.read()
在处理之前将整个文件读取到内存中,如果文件大小与可用RAM大致相同,则可能会冻结您的电脑。选择使用类似于的解决方案,将open(filename,“r”)作为f:for line in f:#尽可能对该行进行处理
为了公平起见,for line in f:
也可能“冻结你的电脑”如果该文件不包含换行符,我怀疑这只会删除该文件的内容。我怀疑这只会删除该文件的内容。嘿,谢谢你的回答