代码之家  ›  专栏  ›  技术社区  ›  E.S.

删除标准输出缓冲区中的最后一个字符

  •  0
  • E.S.  · 技术社区  · 5 年前

    在python3.7中,我试图将JSON数组写入stdout,并希望删除数组中的最后一个逗号

    sys.stdout.write("[")
    [sys.stdout.write(json.dumps(x, separators=(',', ': ')) + ",") for x in list]
    sys.stdout.write("\b]")  # I want to remove the final ',' from above.
    

    我知道 sys.stdout 是缓冲的,所以我要做的是在刷新之前删除缓冲区中的最后一个字符。唯一的问题是我不知道如何正确地访问缓冲区以及确保最后一个字节没有被写入。

    我搞砸了 \b 不管什么都不做的角色,所发生的一切都是 字符成为输出的一部分。

    评论中的一些人建议我使用列表理解并不是在这里而是在运行 json.dumps 在名单上。如果有人有一个如何使用这个的例子,并确保最后一个元素没有逗号尾随,请显示它!

    1 回复  |  直到 5 年前
        1
  •  3
  •   Barmar    5 年前

    最简单的解决方案就是一次转储整个列表:

    sys.stdout.write(json.dumps(list, separators=(',', ': '))
    

    但是,如果确实需要分别编写每个元素,则可以将逗号设为条件:

    last_index = len(list) - 1
    sys.stdout.write("[")
    for i, x in enumerate(list):
        sys.stdout.write(json.dumps(x, separators=(',', ': '))
        if i < last_index:
            sys.stdout.write(',')
    sys.stdout.write("]")