python - 在 for 循环中调用函数以使用 sys.stdout 写入文本文件
问题描述
因此 for 循环中的前两条语句执行 & 被写入文本文件,但函数元素 (y) 尚未写入文件。它只是显示为“无”。任何帮助表示赞赏!
这是我的代码:
def textSummary():
titles = ["Variable Summary", "Preview of the first & last 5 records in the set, data shape, data types etc.", "Statistical Summary - Mean, median, standard deviations etc.", "Statistical Summary of each Species"]
funList = [dataInfo(), summaryAll(), summaryBySpecies(), countSpecies()]
sys.stdout = open ('variableSummary.txt', 'w')
for x, y in zip(titles, funList):
print(x)
print(astrixBorder())
y
解决方案
这是我对正在发生的事情的猜测。
首先,您可能已经这样定义astrixBorder
(或类似的):
def astrixBorder():
print("this")
print("that")
虽然你没有明确写出来,但是这里的返回值是None
,和你写的一样。
def astrixBorder():
print("this")
print("that")
return None
这意味着循环中的print
调用是有效的:for
print(x)
print(None) # and as a side-effect, print some *'s
y
不会打印in循环,for
因为您从不打印print(y)
. 以非交互方式(例如到文件)打印值与在 REPL 中评估表达式并看到 REPL为您打印值不同。
现在应该更清楚为什么你会得到你所做的输出。
要修复它,只需不要print
设置值astrixBorder()
,而是执行. 例如print
y
print(x)
astrixBorder()
print(y)
还
另外,您通过更改打印到文件的方式sys.stdout
可能会在以后给您带来麻烦,并使您的代码的读者感到困惑。我认为您可能选择了这种方法,因为astrixBorder
打印到标准输出。但更好、更清晰的方法是简单地更改astrixBorder
为将输出流作为参数,并使用open
上下文管理器写入文件(并自动关闭)。例如:
def astrixBorder(out):
print("this", file=out)
print("that", file=out)
def textSummary():
titles = ["Variable Summary", "Preview of the first & last 5 records in the set, data shape, data types etc.", "Statistical Summary - Mean, median, standard deviations etc.", "Statistical Summary of each Species"]
funList = [dataInfo(), summaryAll(), summaryBySpecies(), countSpecies()]
with open('variableSummary.txt', 'w') as out:
for x, y in zip(titles, funList):
print(x, file=out)
astrixBorder(out)
print(y, file=out)
推荐阅读
- javascript - 尽管重新启动浏览器,ember-simple-auth 用户仍保持登录状态
- reactjs - VSCode - 更新文件名更改的导入路径?
- javascript - Vuetify - 观察 v-app-bar 的变化,例如 onScroll()
- apache-kafka - RocksDBException - Kafka 消费者没有可用的锁
- reactjs - 如何在chartjs中的多系列饼图中显示名称
- powershell - Powershell Remove-Item 与 cmd rd /s /q "path"
- magento2 - Magento 2 - 本地环境配置
- html - 搜索项的 flex 错误
- javascript - 将嵌套的 json 对象转换为 Multer 的 formdata javascript
- vue.js - Vue owl carousel loop 选项无法正常工作