gpt4 book ai didi

python - 标准输出的 csv 编写器在 block 中抛出错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:13 24 4
gpt4 key购买 nike

如何强制 csv.writer() 在 block 中接受标准输出?

我这个工作正常:

with (open(output, "w")) if output != 'stdout' else stdout as file:

这也很好:

file = csv.writer(open(output, "w") if output != 'stdout' else stdout)

但是当我尝试这样做时:

with csv.writer(open(output, "w") if output != 'stdout' else stdout) as file:

我得到 AttributeError: __exit__

请问如何用积木做这个?我正在寻找类似 ruby solution 的解决方案但对于 python。

最佳答案

  • csv.writer 不必在退出时关闭句柄。因此没有 __exit__ 方法,将 csv.writer 放在 with 语句中是没有意义的。
  • 在我的 python 版本中,您的原始 with open 代码不起作用,我得到一个 AttributeError: __exit__
  • 即使它有效(似乎在 Python 3.6 上有效,因为另一个答案已经测试过),它也会关闭 stdout。不是你想要的。

我用 __enter____exit__(什么都不做)方法创建了一个“假”文件对象。此对象符合 with 约束。

import csv,sys

output="stdout"
class FakeStdout:
def write(self,data):
sys.stdout.write(data)
def __exit__(self,*args,**kwargs):
pass
def __enter__(self):
return self

with (open(output, "w") if output != 'stdout' else FakeStdout()) as file:
cw = csv.writer(file)
cw.writerow([1,2,3])

print("lll")

此代码打印:

1,2,3
lll

它与标准输出一起工作并且在退出时不会关闭它

关于python - 标准输出的 csv 编写器在 block 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com