我想要以下基本构造:
if fname:
fhandle=open(fname,"w")
else:
fhandle=sys.stdout
...code using fhandle for output....
通常,我会使用“with”打开文件,如下所示:
with open(name,"w") as fhandle:
.... code using handle for output....
有没有办法混合这两个结构,以便我可以传递一些东西 在with构造中的open函数会使fhandle指向sys.stdout吗?或者,如果这是一个愚蠢的想法,那么pythonic的方法是什么?
答案 0 :(得分:0)
我认为,您所需要的只是ternary operator:
with open('moo.txt', 'w') if YOU_CONDITION else sys.stdout as f:
f.write('hello')
>> hello
答案 1 :(得分:0)
你可以这样做:
import sys
from contextlib import contextmanager
@contextmanager
def func(fname):
fhandle = open(fname,"w") if fname else sys.stdout
yield fhandle
if fname:
fhandle.close()
并像这样使用它:
with func(fname) as fhandle:
... your code ...
答案 2 :(得分:0)
将代码放在函数中处理输出。
def handle_output(fhandle):
# do stuff
if fname:
with open(fname,"w") as fhandle:
handle_output(fhandle)
else:
fhandle=sys.stdout
handle_output(fhandle)
欢迎提供反馈意见!