2011-09-19 28 views
2

使用Python與SPARQLWrapper,JSON,urlib2 & cgi。麻煩傳遞一個工作的SPARQL查詢與一些NULL值到Python,所以我用文字填充空白,並會嘗試在輸出過濾。我有這個結果部分的例子:python SPARQL查詢結果綁定:關於BINDINGs值的IF語句?

for result in results["results"]["bindings"]: 
      project = result["project"]["value"].encode('utf-8') 
      filename = result["filename"]["value"].encode('utf-8') 
      url = result["url"]["value"].encode('utf-8') 

...我打印%s。有沒有辦法過濾一個值,即IF VALUE NE「string」,然後PRINT?還是有另一種解決方法?我在一個小項目的尾端,我知道我需要一個更好的包裝,我只需要在繼續前取得這些結果。 T非常多IA ...

+0

是那些空值,從你的SPARQL可選條款來了嗎? –

+0

是的,空值來自我的SPARQL中的可選項。對於遲到的回覆抱歉,一定沒有得到通知。我檢查了SPARQLWrapper開發人員,並收到了解決方法:'for results in results [「results」] [「bindings」]: if result.has_key(「party」): print「*」+ result [「person」] [「value」] +「**」+ result [「party」] [「value」] else: 打印結果[「person」] [「value」]'。我需要巧妙地使用%s ...你會提出一個不同的解決方案嗎? – chuckfinley

+0

不,不是。這似乎是正確的解決方案。 –

回答

1

我是SPARQLWrapper庫的開發人員之一,問題是already answered at the mailing list

關於原始查詢中的optionals值,結果集中將沒有這些變量的值。問題是我們需要解析查詢來填充這些缺失的條目,我們希望避免這種解析;因此您需要檢查它以避免運行時出現KeyError問題。

我通常使用像代碼:

for result in results["results"]["bindings"]: 
    party = result["party"]["value"] if ("party" in result) else None