【发布时间】:2016-06-14 14:24:52
【问题描述】:
我想拆分 ascii 文本
1 'K\^o, Suk\'e'
打印为 Python 字符串
line = "1 'K\\^o, Suk\\'e'\n"
进入
['1', 'K\\^o, Suk\\'e']
shlex.split(line) 不起作用,给一个ValueError("No closing quotation")。
我尝试添加到wordchars 如下:
>>> lexer = shlex.shlex(line)
>>> lexer.wordchars += "\\'"
>>> list(lexer)
['1', "'K\\", '^', 'o', ',', "Suk\\'e'"]
但这又不是我的意图。
没有报价,一切都按预期工作:
>>> line2= "1 'K\\^o, Suk\\e'\n"
>>> shlex.split(line2)
['1', 'K\\^o, Suk\\e']
如何解决这个问题?
编辑:我最接近的是:
>>> lexer = shlex.shlex(line)
>>> lexer.wordchars += "\\'"
>>> lexer.wordchars += " "
>>> lexer.wordchars += "\\^"
>>> lexer.wordchars += ","
>>> list(lexer)
['1', "'K\\^o,", "Suk\\'e'"]
还是不对。
编辑:示例字符串有些误导。它也应该能够分裂,比如说
>>> l1 = "C12 H2 'Hello friend'"
shlex 得到 l1 没问题。
【问题讨论】:
-
为什么会在第一个空格上分割,而不是第二个空格?
-
@VasiliSyrakis:因为第二个在单引号内。
-
@Aquiles:我的 ascii 文件中的文本是
1 'K\^o, Suk\'e'。当使用f.readlines()加载它时,它会打印为"1 'K\\^o, Suk\\'e'\n"。希望这能澄清我的意思。 -
大声笑,真的...我的错...我在考虑单引号字符串...抱歉
-
这个例子也是无效的python语法:
l2 = "1 8.52 H22 '\''
标签: python python-3.x shlex