相关疑难解决方法(0)

如何很好地处理`open(...)`和`sys.stdout`?

通常我需要将数据输出到文件,或者,如果未指定文件,则输出到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

84
推荐指数
7
解决办法
3万
查看次数

Python从命令行参数或stdin读取

在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这样做的方式,还是我错过了图书馆的某些部分?

python stdin input command-line-arguments

9
推荐指数
1
解决办法
2万
查看次数

如何在Python中逐行读取文件(或stdin)而不是等待读取整个文件

我们在磁盘中有几个巨大的文件(大于RAM的大小).我想在python中逐行读取它们并在终端输出结果.我已经完成了[1]和[2],但我正在寻找不等到整个文件被读入内存的方法.

我将使用这两个命令:

cat fileName | python myScript1.py
python myScript2.py fileName
Run Code Online (Sandbox Code Playgroud)

[1] 你如何从Python中读取stdin? [2] 如何在python中编写unix过滤器?

python filter

7
推荐指数
1
解决办法
9524
查看次数

标签 统计

python ×3

command-line-arguments ×1

filter ×1

input ×1

stdin ×1