我使用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对象中,为什么不使用模式将其拆分,也不使用替换函数删除字符?
答案 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>']