无法将字符串保存到变量中

时间:2014-05-28 13:45:06

标签: python regex string python-unicode

我使用HP uCMDB从服务器中提取数据。在我的python脚本中,我有这个:

iostat_cmd = client.executeCmd('iostat -En '+disk+'|egrep \'Vendor|Size\'')

执行iostat并返回此信息:

-bash-3.2$ iostat -En|egrep "Vendor|Size"
Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:  
Size: 8.59GB <8589934080 bytes>

到目前为止一直很好,这就是问题的起点。 它不是将其保存为字符串,而是将其保存为“unicode”字样。宾语。 从现在开始,我使用字符串操作和正则表达式模式,但它们都不起作用,我无法删除任何换行符,我无法使用正则表达式模式进行拆分等。我可以&# 39;甚至强行将它转换成字符串。

使用print添加有问题的代码部分:

        iostat_cmd = client.executeCmd('iostat -En '+disk+'|egrep \'Vendor|Size\'')
        iostat_cmd = iostat_cmd.split(r'\s\s+')
        print iostat_cmd
        print type(iostat_cmd)
jvm 3    | [u'Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:      \r\nSize: 8.59GB <8589934080 bytes>']
jvm 3    | <type 'list'>

基本上,我想删除换行符和回车符。然后,我想使用\ s \ s + regex模式(即2个或更多空格)将字符串拆分为列表,然后将值返回给应用程序。请注意,我已经在线测试了这种模式,它应该可以使用。

我也尝试过这样:

        iostat_cmd = client.executeCmd('iostat -En '+disk+'|egrep \'Vendor|Size\'')
        iostat_cmd = str(iostat_cmd)
        print iostat_cmd
        print type(iostat_cmd)
jvm 3    | Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:  
jvm 3    | Size: 8.59GB <8589934080 bytes>
jvm 3    | <type 'str'>
        iostat_cmd = iostat_cmd.replace(r'\r',' ')
        print iostat_cmd
        print type(iostat_cmd)
jvm 3    | Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:  
jvm 3    | Size: 8.59GB <8589934080 bytes>
jvm 3    | <type 'str'>
        iostat_cmd = iostat_cmd.split(r'\s\s+')
        print iostat_cmd
        print type(iostat_cmd)
jvm 3    | ['Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:    \r\nSize: 8.59GB <8589934080 bytes>']
jvm 3    | <type 'list'>

任何想法我做错了什么?我似乎无法掌握它,我已经这样做多年了。为什么将字符串保存到unicode对象中,为什么不使用模式将其拆分,也不使用替换函数删除字符?

1 个答案:

答案 0 :(得分:1)

unicode对象没什么问题,这里的问题是str.split不带正则表达式,只需要一个分隔符列表,你需要重新:

>>> import re
>>> iostat_cmd = u'Vendor: VMware   Product: Virtual disk     Revision: 1.0  Serial No:      \r\nSize: 8.59GB <8589934080 bytes>'
>>> re.split(r'\s\s+', iostat_cmd)
[u'Vendor: VMware', u'Product: Virtual disk', u'Revision: 1.0', u'Serial No:', u'Size: 8.59GB <8589934080 bytes>']