2013-12-11 24 views
3

我正在構建一個程序,以根據不同的條件向dbf寫入新值,但我遇到了一個問題,python不會將文本值識別爲if/else語句的一部分。如何讓python識別DBF中的字符串值作爲if/else語句的一部分?

如果我充滿了真/假值「COL1」,我想說:

my_table.add_fields('col2 N(2,0)') 

for record in dbf.Process(my_table): 
    if record.col1 == 'true': 
     record.col2 = 1 
    else: 
     record.col2 = 2 

我得到蟒蛇承認「真/假」的值作爲該聲明的一部分怎麼辦?

+0

如果你只是使用'如果record.col1:'或'如果布爾(record.col1):'?會發生什麼? – jonrsharpe

+0

布爾()可能不會工作,因爲我想處理除真/假以外的文本值,只是在我的示例中使用true/false來簡化。 我不明白你的意思,只是說 如果record.col1: 第一行?? – wonderstruck80

+0

所以'col1'不只是''true''和''false''?你發佈的代碼有什麼錯誤? – jonrsharpe

回答

1

什麼樣的數據類型是col1?基本的dbf數據類型爲Char(文本),Date(日期時間),Logical(布爾值)Number(整數/浮點數),Float(整數/浮點數)和Memo(無邊界文本)。

如果col1不是Char字段,則與字符串比較將始終返回False。如果col1是Char字段,那麼只有當col1非常激動'真' - 而不是'真'或'真'或'真'時,它纔會相等。

如果問題是多餘的空格(默認爲我的模塊返回的整個領域,包括尾隨空格),則可以這樣做:

if record.col1.strip() == 'true': 

或告訴dbf.Table使用定製Char類型忽略尾隨空格:

my_table = dbf.Table('/path/to/file', default_data_types={'C':dbf.Char}) 
+0

奇怪的是,這些都似乎做的伎倆,即使我的價值觀似乎根本沒有空格..非常感謝你Ethan,如果我可以投票5倍! – wonderstruck80

+0

@ user21267:所以投票一次,並接受答案(按我的問題點擊綠色複選標記;)這個問題出現的原因是,如果字段大小爲7,返回的是'true _ _ _' (下劃線代表空格)。 –

+0

顯然,沒有足夠的代表upvote :(這使得完全意義。謝謝你Ethan – wonderstruck80

相關問題