我的一項新任務需要我將數據從一種格式轉換或映射到另一種格式,通常是從xcel,csv或ms mdb轉換爲xml,sql或根據我給出的規範所以通常每個映射都是不同的。我已經開始學習Python,將其作爲Lisp的先驅。我每天都在學習更多東西,而且我的工作確實很有趣。我正在試圖將我的大腦包裹在發電機和迭代器周圍,但我還不確定何時需要它們,但這裏是我卡住的地方。使用Python劃分列表以映射數據的問題
什麼是適當的pythonic方式來使用切片內的值來測試某些條件,如果符合然後分配適當的值。當我嘗試一個if elif與< =我沒有得到我想要的結果。下面的例子只是我創建的用於測試條件的許多if語句中的一個。
#This works
hsa_id = ''
if "1" in csvitem[63:64]:
hsa_id = '<4 hours'
elif "2" in csvitem[63:64]:
hsa_id = '<4 hours'
elif "4" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "5" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "6" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "8" in csvitem[63:64]:
hsa_id = '8-16 hours'
elif "9" in csvitem[63:64]:
hsa_id = '8-16 hours'
elif "16" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "17" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "24" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "25" in csvitem[63:64]:
hsa_id = '>24 hours'
else:
hsa_id = ''
HOURSSINCEAWAKENING.append(hsa_id)
#This does not work. I tried removing the quotes. With and without the quotes I get all identical values.
hsa_id = ''
if csvitem[63:64] <= "3":
hsa_id = '<4 hours'
elif csvitem[63:64] <= "7":
hsa_id = '4-8 hours'
elif csvitem[63:64] <= "15":
hsa_id = '8-16 hours'
elif csvitem[63:64] <= "23":
hsa_id = '16-24 hours'
elif csvitem[63:64] > "23":
hsa_id = '>24 hours'
else:
hsa_id = ''
HOURSSINCEAWAKENING.append(hsa_id)
#Output from what does not work truncated for brevity as there are thousands of records.
['<4 hours', '<4 hours', '<4 hours', '<4 hours',...
我最初嘗試過,但由於該片是一個列表,我無法將該項轉換爲測試的整數。我得到以下錯誤:if int(csvitem [63:64])<= 3: TypeError:int()參數必須是字符串或數字,而不是'list' – MWR 2011-03-09 20:18:48
列表中只有一個字符,嘗試int cvsitem [63:64] [0]) – joaquin 2011-03-09 20:21:25
在任何情況下,您都可以使用cvsitem [63]進行簡化,您將直接得到數字而不是帶有數字的列表。 – joaquin 2011-03-09 20:30:27