【问题标题】:split bytes variable on newline在换行符上拆分字节变量
【发布时间】:2016-07-28 15:10:15
【问题描述】:

这是一个不寻常的请求,我希望得到一些指导! :)

我有一个 python 变量,为简单起见,我们可以称它为“输出”

当我打印输出时,我得到以下信息:

b"word1\nword2\nword3\n"

如果我能打印的话我会喜欢的

word1
word2
word3
word4

我尝试拆分变量,并将其提供给 for 循环,但成功率为零。我很高兴将输出写入操作系统中的文件并使用 bash 来解决问题。

谢谢!

【问题讨论】:

标签: python variables for-loop


【解决方案1】:

听起来您正在使用 Python 3 并调用

>>> print(b"foo\nbar\nbaz")
b'foo\nbar\nbaz'

这是str(bytes) 在行动:字节字符串的(Unicode)字符串表示。通过首先对其进行解码,您会得到 Python 3 可以更优雅地打印的内容。

>>> print(b"foo\nbar\nbaz".decode('utf-8'))
foo
bar
baz

【讨论】:

    【解决方案2】:

    您需要这样做(有关详细信息,请参阅string.split 函数)...

    for word in output.decode('utf-8').split('\n'):
        print word
    

    而且你不需要打印 word - 你可以用它做任何你想做的事情。此循环将遍历output 中的每一行。

    【讨论】:

    • 在没有参数的情况下调用 split 将不仅仅在 \n 上进行拆分(这在这里可能很重要,也可能无关紧要)
    • 如果正在打印\n,则表示实际字符串中包含\\n
    • @jeff_h 你有什么理由使用字节而不是字符串?
    • 我在收到错误之前尝试过拆分:for i in output.split('\n'): TypeError: a bytes-like object is required, not 'str'
    • 我使用的是变量名输出,它是这样创建的:output = ssh_stderr.read() + ssh_stdout.read()
    【解决方案3】:

    在我看来,您的字符串有 转义 换行符。 str.split 在这里帮不了你,str.splitlines 也帮不上忙。您需要解码转义:

    >>> print s
    word1\nword2\nwored3\n
    >>> print s.decode('string-escape')
    word1
    word2
    wored3
    

    【讨论】:

    • 有趣,所以我应该试试: print(output.decode('\\n')) ? :)
    【解决方案4】:

    假设 Python 3。你有一个字节字符串 (bytes),不同于 unicode 字符串 (str)。

    bstring = b"word1\nword2\nword3\nword4"
    

    换行符'\n'u'\n'(unicode 字符串)相同,与b'\n' 不同。 如果您只对拆分感兴趣,可以使用b'\n' 作为分隔符:

    for w in bstring.split(b'\n'):
        print(w)
    

    这将打印字节字符串b'word1', ... 如果您想要常规字符串,则必须在拆分之前或之后解码,如其他解决方案所示:

    for w in bstring.decode().split('\n'):
        print(w)
    

    这使用你的默认编码(通常是 utf-8),如果你想要一个不同的编码,你可以将它作为参数传递给decode()。您可以在Python manual中找到更多信息

    【讨论】:

      【解决方案5】:
      output = b"word1\nword2\nword3\nword4\n"
      for w in output.split():
          print(w)
      

      【讨论】:

        猜你喜欢
        • 2013-12-03
        • 2020-08-12
        • 2018-01-24
        • 2014-08-05
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多