是的,这是另一个' str'对象没有属性'写'问题

时间:2016-03-26 01:42:44

标签: python

这是我的代码看起来像

import re 

fileIN = str(open('instructions.txt', 'w+'))

contents = re.sub('a', 'x', fileIN)

fileIN.write(contents)

我希望这个程序取代字母' a'用字母' x'在文件' instructions.txt'中,如下所示:

a
ab
abc

TO

x
xb
xbc

然后将结果保存在同一个文件中。但是,当我运行它时,我收到以下错误消息:

AttributeError: 'str' object has no attribute 'write'

我确定这是一个快速修复,但我似乎无法找到它。

任何帮助将不胜感激!如果我需要提供其他信息,请与我们联系。

(免责声明:请原谅我发布了一个非常常见的问题。我确实看过许多类似的帖子,但我无法收集任何解决方案。我刚开始学习python一周前,我想也许我可以试试编写一个小程序来帮助我节省一些工作时间。可悲的是,这种情况适得其反,因为我已经花了太多时间试图弄明白自己。)

(编辑:感谢所有评论和帮助过的人。我认为我的问题会被深深地推向地狱的深处,因为我认为这个问题非常微不足道。我觉得我真的很支持编码菜单,我和很高兴我有这种经历。)

5 个答案:

答案 0 :(得分:1)

您正在打开一个文件:

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引用的文件对象。

答案 1 :(得分:0)

你为什么使用str?:

with open('file', 'r') as f:
    text = f.read()

with open('file', 'w') as f:
   f.write(re.sub('a', 'x', text))

答案 2 :(得分:0)

它告诉你没有方法写在字符串对象上。您需要在文件对象上调用write。

fileIN = open('instructions.txt', 'w+')  
contents = fileIN.read()
fileIN.write(re.sub('a', 'x', contents))

答案 3 :(得分:0)

这不需要import re。内置replace()即可。

with open("instructions.txt", "r+") as f:
    data = f.read().replace("a","x")
    f.seek(0)
    f.write(data)

答案 4 :(得分:-1)

确保不要混淆文件对象和字符串:

import re
f = open('instructions.txt', 'w+')
contents = re.sub('a', 'x', f.read())
f.write(contents)