通常我需要将数据输出到文件,或者,如果未指定文件,则输出到stdout.我使用以下代码段:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Run Code Online (Sandbox Code Playgroud)
我想重写它并统一处理两个目标.
在理想的情况下,它将是:
with open(target, 'w') as h:
h.write(content)
Run Code Online (Sandbox Code Playgroud)
但这不会很好,因为离开with块时sys.stdout被关闭,我不想这样做.我不想
stdout = open(target, 'w')
...
Run Code Online (Sandbox Code Playgroud)
因为我需要记住恢复原始标准输出.
有关:
编辑
我知道我可以换行target,定义单独的函数或使用上下文管理器.我寻找一种简单,优雅,惯用的解决方案,不需要超过5行
在Python中编写面向文本的命令行程序时,我经常想要读取命令行上传递的所有文件,或者(XOR)标准输入(如Unix cat,或Perl <>).所以,我说
if len(args) == 0: # result from optparse
input = sys.stdin
else:
input = itertools.chain(*(open(a) for a in args))
Run Code Online (Sandbox Code Playgroud)
这是Pythonic这样做的方式,还是我错过了图书馆的某些部分?
我们在磁盘中有几个巨大的文件(大于RAM的大小).我想在python中逐行读取它们并在终端输出结果.我已经完成了[1]和[2],但我正在寻找不等到整个文件被读入内存的方法.
我将使用这两个命令:
cat fileName | python myScript1.py
python myScript2.py fileName
Run Code Online (Sandbox Code Playgroud)