【问题标题】:Python 2.7 splitlines fails to split over trailing backslashPython 2.7 splitlines 无法拆分尾随反斜杠
【发布时间】:2015-03-26 13:32:43
【问题描述】:

使用 Python 2.7.9,我尝试采用 DOS 样式的目录列表,并使用内置的 splitlines 函数将其拆分为单独的行。清单是一个目录,我的三引号字符串中的一行包含一个尾随反斜杠。问题在于以反斜杠结尾的行没有被拆分:

# DOS-style listing of the directory "B:\"
listing = """Directory of B:\
            12/15/2014  02:12 PM             1814814 BIRD.LOG
            01/01/2000  12:04 AM    <DIR>            CONFIG
            12/15/2014  02:55 PM               35060 ALLIGATOR.LOG
            03/15/2013  02:06 PM    <DIR>            MONKEY
            03/15/2013  02:06 PM    <DIR>            FROG
            03/15/2013  02:06 PM    <DIR>            BADGER
                2 File(s)    1849874 bytes
                4 Dir(s)     1674739712 bytes free
"""

# BIRD.LOG is combined with prior line ending in a backslash
print "keepends = False"
for line in listing.splitlines(False): print repr(line)

# Setting keepends=True does not help
print "keepends = True"
for line in listing.splitlines(True): print repr(line)

这是输出:

keepends = False
'Directory of B:          12/15/2014  02:12 PM             1814814 BIRD.LOG'
'          01/01/2000  12:04 AM    <DIR>            CONFIG'
'          12/15/2014  02:55 PM               35060 ALLIGATOR.LOG'
'          03/15/2013  02:06 PM    <DIR>            MONKEY'
'          03/15/2013  02:06 PM    <DIR>            FROG'
'          03/15/2013  02:06 PM    <DIR>            BADGER'
'              2 File(s)    1849874 bytes'
'              4 Dir(s)     1674739712 bytes free'
keepends = True
'Directory of B:          12/15/2014  02:12 PM             1814814 BIRD.LOG\n'
'          01/01/2000  12:04 AM    <DIR>            CONFIG\n'
'          12/15/2014  02:55 PM               35060 ALLIGATOR.LOG\n'
'          03/15/2013  02:06 PM    <DIR>            MONKEY\n'
'          03/15/2013  02:06 PM    <DIR>            FROG\n'
'          03/15/2013  02:06 PM    <DIR>            BADGER\n'
'              2 File(s)    1849874 bytes\n'
'              4 Dir(s)     1674739712 bytes free\n'

通过keepends = True,问题没有改变。 Python splitlines documentation 没有提到对反斜杠的任何特殊处理,universal newlines approach 的文档也没有提到拆分行。

我的代码示例来自单元测试,但在现实世界中,列表将以编程方式检索。我可以想到涉及操纵我的输入列表或其他方法的变通方法,但我想知道为什么根本需要变通方法。它是一个错误吗?任何建议都将不胜感激!

【问题讨论】:

    标签: python python-2.7 split backslash


    【解决方案1】:

    您的单元测试的问题是您的字符串文字中的\ 字符被Python 解释为转义字符。尝试将第一行更改为

    listing = r"""Directory of B:\
    

    来自Python docs

    字符串文字可以选择以字母“r”或“R”作为前缀;此类字符串称为原始字符串,并使用不同的规则来解释反斜杠转义序列。

    在从命令输出中获取字符串的实际工作场景中,这应该不是问题。

    【讨论】:

    • 我的问题是我将原始字符串与三引号字符串混为一谈。原始字符串的目的是简化反斜杠字符的输入,而三引号的目的是简化引号和换行符的输入。它们是独立的功能,在答案中,两者都被使用。
    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 2020-03-14
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多