获取字符串的数字并对其进行操作
Take numbers of a string and operate with them
我有这样一个字符串:
vserver volume changelog-usage
----------------- ------------------------------------------------ ---------------
svm_name name_of_volume_1 11%
svm_name2 name_of_volume_2 10%
svm_name3 name_of_volume_3 0%
svm_dSN_SM2M_NAS shorter_name_4 15%
我正在使用此代码:
matchArr = string.split("\n")
for i in matchArr:
tmpMatchArr = i.split(" ")
for i in range(0, len(tmpMatchArr)):
if int(tmpMatchArr[2].replace("%", "")) < 10:
break
if i == 2:
finalString += " = " + tmpMatchArr[i] + ", "
elif i == 1:
finalString += tmpMatchArr[i]
else:
finalString += tmpMatchArr[i] + "."
print(finalString);
问题是,我只想取大于 10 的那些值,但我收到此错误:
IndexError: list index out of range
所需的输出是这样的:
WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%
编辑:选择数字的正则表达式不是一个选项,因为卷的名称已经包含一些数字...
如果您想简化一些事情,您可能需要考虑正则表达式:
import re
warnings = re.findall('\n(\S+)\s+(\S+)\s+(\d+)\%', string)
print('WARNING: Usage greater than 10% at: '
+ ', '.join('{}.{}={}%'.format(*w) for w in warnings if int(w[2]) > 10))
输出:
WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%
我有这样一个字符串:
vserver volume changelog-usage
----------------- ------------------------------------------------ ---------------
svm_name name_of_volume_1 11%
svm_name2 name_of_volume_2 10%
svm_name3 name_of_volume_3 0%
svm_dSN_SM2M_NAS shorter_name_4 15%
我正在使用此代码:
matchArr = string.split("\n")
for i in matchArr:
tmpMatchArr = i.split(" ")
for i in range(0, len(tmpMatchArr)):
if int(tmpMatchArr[2].replace("%", "")) < 10:
break
if i == 2:
finalString += " = " + tmpMatchArr[i] + ", "
elif i == 1:
finalString += tmpMatchArr[i]
else:
finalString += tmpMatchArr[i] + "."
print(finalString);
问题是,我只想取大于 10 的那些值,但我收到此错误:
IndexError: list index out of range
所需的输出是这样的:
WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%
编辑:选择数字的正则表达式不是一个选项,因为卷的名称已经包含一些数字...
如果您想简化一些事情,您可能需要考虑正则表达式:
import re
warnings = re.findall('\n(\S+)\s+(\S+)\s+(\d+)\%', string)
print('WARNING: Usage greater than 10% at: '
+ ', '.join('{}.{}={}%'.format(*w) for w in warnings if int(w[2]) > 10))
输出:
WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%