Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是的,这是另一个'';str';对象没有属性';写';问题_Python - Fatal编程技术网

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:
也可能“冻结你的电脑”如果该文件不包含换行符,我怀疑这只会删除该文件的内容。我怀疑这只会删除该文件的内容。嘿,谢谢你的回答