<p>还有一种方法更灵活,您可以更好地控制必须应用于这些值的条件。当有很多字段需要处理并且需要做一些更复杂的事情时,这可能会很有帮助</p>
<p>我们可以为每个字段动态调用特定于此特定描述的方法。例如,当处理描述为Battery的字段时,我们调用<em>FieldProcessor</em>类的<em>process\u Battery</em>,依此类推</p>
<p>所以在打印功能中:</p>
<pre><code>for each in output[8:]:
print each, type(each)
</code></pre>
<p>我会添加一些代码如下:</p>
<pre><code>import re, sys
from collections import namedtuple
for each in output[8:]:
# I prefer using namedtuple so we can use tuple.description and tuple.value
field = namedtuple("field", "description value")
# Regular expression for extracting the description and value
# May be optimized, play with it :) takes description containing A-Z,a-z,_
result = re.findall(r'^ *([A-Za-z_]*).*: (.*)$', each)
if len(result):
# Make namedtuple from tuple
field = field._make(result[0])
processor = FieldProcessor()
# Get function of FieldProcessor with description name
process_func = getattr(processor, 'process_'+field.description.lower(), None)
if callable(process_func):
process_func(field)
else:
print "Cannot parse field "+each
</code></pre>
<p>然后我们可以有FieldProcessor类,在这里你可以用你的值做任何事情。我希望将str转换为float等不会有问题</p>
<pre><code>class FieldProcessor:
def process_voltage(self, field):
pass
def process_inclination(self, field):
# Converting to float, int, ...
if field.value > 20:
print "Inclination more then 20"
def process_survey_time(self, field):
pass
def process_temperature(self, field):
pass
</code></pre>