我試圖檢查一個值與min_value和max_value,但max_value無法設置,因此沒有最大限制。再次檢查值的最大和最小變量
下面是使用一些TESTDATA我從Atom提要林得到
<entry>
<content type="application/xml">
<f:fpdata>
<f:max_value_a>500 000</f:max_value_a> #OPTIONAL
<f:max_value_b>100 0000</f:max_value_b> #OPTIONAL
<f:max_value_c>2 000 000</f:max_value_c> #OPTIONAL
<f:max_value_d>3 000 001</f:max_value_d> #OPTIONAL
<f:min_value_a>0</f:min_value_a>
<f:min_value_b>500 000</f:min_value_b> #OPTIONAL
<f:min_value_c>100 0000</f:min_value_c> #OPTIONAL
<f:min_value_d>2 000 000</f:min_value_d> #OPTIONAL
<f:target_1_a>1,1</f:f:target_1_a>
<f:target_1_b>2,2</f:target_1_b> #EXIST ONLY IF <f:min_value_b> is set
<f:target_1_c>3,3</f:target_1_c> #EXIST ONLY IF <f:min_value_c> is set
<f:target_1_d>4,4</f:target_1_d> #EXIST ONLY IF <f:min_value_d> is set
<f:target_2_a>10</f:f:target_2_a>
<f:target_2_b>20</f:target_2_b> #EXIST ONLY IF <f:min_value_b> is set
<f:target_2_c>30</f:target_2_c> #EXIST ONLY IF <f:min_value_c> is set
<f:target_2_d>40</f:target_1_d> #EXIST ONLY IF <f:min_value_d> is set
</f:fpdata>
</content>
</entry>
編輯:
這裏是大數據集的貼:http://pastebin.com/r5HkWHA5
這裏是我到目前爲止已經試過
request = urllib2.Request(settings.FEED_URL)
base64string = base64.encodestring('%s:%s' % (settings.FEED_USERNAME, settings.FEED_PASS)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
d = feedparser.parse(result)
for data in d.entries:
test_amount = 3000000.00
values = {}
if (data.f_min_value_d <= test_amount) and (data.f_max_value_d >= test_amount):
values.update({'target' : data.f_target_d})
if (data.f_min_value_c <= test_amount) and (data.f_max_value_c >= test_amount):
values.update({'target' : data.f_target_c})
if (data.f_min_value_b <= test_amount) and (data.f_max_value_b >= test_amount):
values.update({'target' : data.f_target_b})
if (data.f_min_value_a <= test_amount) and (data.f_max_value_a >= test_amount):
values.update({'target' : data.f_target_a})
如果test_amount
是3000000.00
我應該得到data.f_target_d
變量。
如果test_amount
是50000.00
我應該得到data.f_target_a
變量。
我需要幫助來檢查是否有設置任何max_value_ *(如果它沒有設置,那豈不是沒有上限最大限制)
編輯2:
這裏是我的代碼現在使用:
values = {}
values.update({'query' : None})
def clean(entry, label, default='nan'):
return float(''.join(entry.get(label, default).split()))
labels = [['f_{}_{}'.format(label, c) for label in 'min_value', 'max_value', 'target_1', 'target_2']
for c in 'abcd']
for data in d.entries:
for min_label, max_label, target_1_label, target_2_label in labels:
min_value = clean(data, min_label, '-inf')
max_value = clean(data, max_label, 'inf')
if min_value < test_amount <= max_value:
target = clean(data, target_label)
values.update({'target_1' : clean(data, target_1_label), 'target_2' : clean(data, target_2_label), 'query' : True})
我沒有得到任何錯誤,但所有的數據target_1_label
和target_2_label
回報nan
。
編輯3
最後只是像這樣的每一個字母(A,B,C,d)
if hasattr(data, 'f_max_value_d'):
max_value_d = int(data.f_max_value_d.replace(u'\xa0',''))
else:
max_value_d = None
if hasattr(data, 'f_min_value_d'):
min_value_d = int(data.f_min_value_d.replace(u'\xa0',''))
else:
min_value_d = None
if (min_value_d is None or min_value_d <= test_amount) and (max_value_d is None or max_value_d >= test_amount) and min_value_d is not None:
values.update({'target1' : int(data.f_target_1_d.replace(u'\xa0','')), 'target2' : int(data.f_target_2_d.replace(u'\xa0','')), 'query' : True})
不是很Python的,但它的作品。
可以粘貼從輸入文件抓住最小值/最大值的代碼? – Stuart 2014-12-05 11:40:10
輸入中沒有f_max_value_d。你的問題仍然很不清楚。 – kmario23 2014-12-05 11:44:35
@ mario23:對不起,如果不清楚。如果沒有f_max_value_d或f_max_value_c或f_max_value_b或f_max_value_a,則意味着沒有上限,這是我試圖解決/檢查的問題。 – 2014-12-05 11:52:28