<p>您可以为<code>Aggregate</code>、<code>DateAggregateDimensionValue</code>、和{<cd3>}定义最小类,然后<code>eval</code>依次为每一行定义:</p>
<pre><code>import datetime
# define UTC timezone for sake of eval
if hasattr(datetime,"timezone"):
UTC = datetime.timezone(datetime.timedelta(0),"UTC")
else:
UTC = None
# define minimal classes to eval initializers
class AggregateDimensionValue(object):
def __init__(self, value):
self.value = value
class StringAggregateDimensionValue(AggregateDimensionValue): pass
class DateAggregateDimensionValue(AggregateDimensionValue): pass
class Aggregate(object):
def __init__(self, aggregate_dimension_value_list, quantity):
self.timestamp, self.s1, self.s2 = aggregate_dimension_value_list
# pull values out of parsed "aggregate" instances
self.timestamp = self.timestamp.value
if self.s1 is not None:
self.s1 = self.s1.value
if self.s2 is not None:
self.s2 = self.s2.value
self.quantity = quantity
</code></pre>
<p>使用这些最小类来<code>eval</code>输入字符串:</p>
^{pr2}$
<p>给出:</p>
<pre><code>{'timestamp': datetime.datetime(2013, 8, 28, 19, 30), 's1': None, 'quantity': 127, 's2': u'VIRTUALLY_LABELED_CASE'}
{'timestamp': datetime.datetime(2013, 8, 28, 19, 30), 's1': u'PPTransMergeNonCon', 'quantity': 15, 's2': u'PRIME_BIN_RANDOM_STOW'}
{'timestamp': datetime.datetime(2013, 8, 27, 21, 0), 's1': u'PPTransFRA1', 'quantity': 8, 's2': u'PRIME_BIN_RANDOM_STOW'}
</code></pre>
<p>当然,这与使用<code>eval</code>有关的所有常见警告一起出现,例如小心任何可能的恶意代码注入。但是我怀疑你自己已经控制了这个输入文件,所以如果你注入你自己的恶意代码,你只能怪你自己。在</p>