sys.stdout.write()疑问
import syscontent = input('请输入内容:')
con_txt = open('文档.txt','w',encoding='utf-8')
for item in content:
sys.stdout.write(item)
sys.stdout = con_txt
con_txt.close()
为什么我输入1234,但会在控制台输出1,234写入到文档里;而不是1234都写入到文档里 问题出在你在循环中将sys.stdout指向了con_txt,导致后续的输出都被重定向到了文档中。在循环开始之前,你应该将sys.stdout重新指向标准输出。以下是修改后的代码:
import sys
content = input('请输入内容:')
con_txt = open('文档.txt', 'w', encoding='utf-8')
stdout_backup = sys.stdout# 保存原始的sys.stdout对象
for item in content:
sys.stdout.write(item)
sys.stdout = stdout_backup# 恢复原始的sys.stdout对象
con_txt.close()
这样修改后,你输入的1234就会同时在控制台和文档中输出。 问题:
为什么我输入1234,但会在控制台输出1,234写入到文档里;而不是1234都写入到文档里。
回答:
这个问题出现的原因是将sys.stdout指向了文件对象后,所有的标准输出都会被重定向到该文件,而不再在控制台上显示。因此,你只能在控制台逐个字符地看到输出。
为了解决这个问题,可以将每个字符都先保存到一个字符串中,然后一次性将整个字符串写入文件。同时,还需要注意恢复正确的sys.stdout输出流。
以下是修改后的完整代码:
import sys
content = input('请输入内容:')
con_txt = open('文档.txt', 'w', encoding='utf-8')
# 保存输出内容的字符串
output_str = ""
for item in content:
output_str += item
sys.stdout.write(item)
# 恢复正确的 sys.stdout 输出流
sys.stdout = sys.__stdout__
# 将整个字符串写入文件
con_txt.write(output_str)
con_txt.close()
请将代码中的 文档.txt 替换成你想要保存输出的文件名。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
首先,让我解释一下你的代码中的情况。
你使用了sys.stdout.write(item)将每个字符逐个输出到控制台。然后,你试图通过将sys.stdout重定向到文件来将输出写入文件中。
但是,在你的代码中,重定向文件的语句sys.stdout = con_txt被放在了循环内部。这意味着每循环一次,sys.stdout都会被重定向一次,导致只有最后一个字符被写入文件。
为了解决这个问题,你需要将sys.stdout = con_txt放在循环之前,而不是在循环内部。请参考下面修改后的代码:
import sys
content = input('请输入内容:')
con_txt = open('文档.txt', 'w', encoding='utf-8')
sys.stdout = con_txt# 将输出重定向到文件
for item in content:
sys.stdout.write(item)
con_txt.close()
这样修改后,输入的内容 "1234" 将会完整地写入到文档中。 你在第一次循环的最后才重定向的,所以第一次循环的输出当然是输出到控制台了
页:
[1]