鱼C论坛

 找回密码
 立即注册
查看: 1754|回复: 4

[已解决]sys.stdout.write()疑问

[复制链接]
发表于 2023-8-7 21:57:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import sys
content = 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都写入到文档里
最佳答案
2023-8-7 22:00:29
首先,让我解释一下你的代码中的情况。

你使用了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" 将会完整地写入到文档中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-7 21:57:39 | 显示全部楼层
问题出在你在循环中将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就会同时在控制台和文档中输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 21:57:42 | 显示全部楼层
问题:

为什么我输入1234,但会在控制台输出1,234写入到文档里;而不是1234都写入到文档里。

回答:

这个问题出现的原因是将sys.stdout指向了文件对象后,所有的标准输出都会被重定向到该文件,而不再在控制台上显示。因此,你只能在控制台逐个字符地看到输出。

为了解决这个问题,可以将每个字符都先保存到一个字符串中,然后一次性将整个字符串写入文件。同时,还需要注意恢复正确的sys.stdout输出流。

以下是修改后的完整代码:
import syscontent = 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 替换成你想要保存输出的文件名。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 22:00:29 | 显示全部楼层    本楼为最佳答案   
首先,让我解释一下你的代码中的情况。

你使用了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" 将会完整地写入到文档中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-7 22:02:05 | 显示全部楼层
你在第一次循环的最后才重定向的,所以第一次循环的输出当然是输出到控制台了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表