2010-03-03 68 views
1

我有一個CSV文件,我正在運行一個腳本來插入數據庫。 如果該值爲空,那麼我不想插入它。這是我有什麼Python檢查空白CSV值不起作用

if attrs[attr] != '' and attrs[attr] != None: 
      log.info('Attriute ID: %s' % attr) 
      log.info('Attriute Value: %s' % attrs[attr]) 
      sql = insert_attr_query(attrs[attr], object_id, attr) 
      cursor.execute(sql) 

它是空白的,它不= =或None,那麼這樣做=?

+0

只需要清楚,無論if語句試圖阻止它,它都會插入空值 – KacieHouser 2010-03-03 22:49:02

+0

如何從'csv.reader'中設置'None'值? – 2010-03-04 09:11:31

回答

4

這可能是空白,即一個標籤或字符串空間嘗試: -

attrs[attr].strip() 
+1

whitespace grrr – KacieHouser 2010-03-03 22:59:11

+0

也謝謝你,我沒有看到你提供了strip功能。 – KacieHouser 2010-03-03 23:14:03

3

據推測它包含空格。您可以通過打印repr(attrs[attr])檢查這裏面就會把引號圓它,並顯示選項卡,在「\ t」的

更改代碼if attrs[attr] is not None and attrs[attr].strip() !="":

+0

我正在考慮尋找一個去掉空格的函數,但除非只有空格,否則我不希望它被分條,但這是有道理的。 – KacieHouser 2010-03-03 23:13:07

+1

Strip是一個字符串成員函數,不是嗎?所以你需要'如果attrs [attr]不是None和attrs [attr] .strip()!=「」:' – 2010-03-04 05:17:34

+0

@craig:謝謝你的解決 - 修正它。 – 2010-03-04 07:06:07

1

你應該(幾乎)總是在準備用於任何文本字符串空白標準化插入到數據庫中(或用於許多其他目的)。 (1)去掉任何前導空白(2)去掉任何尾隨空白(3)將空格的任何內部運行(長度> = 1)精確地替換爲1個空格(U + 0020)。

空白不應限於Python提供的標準,特別是如果您使用Python 2.X而不使用unicode對象。例如,在默認的「C」語言環境中,「\ xA0」不被視爲空格,但很可能代表無間隔空格(U + 00A0)。

用於Python 2.X樣品的編號:

def normalize_white_space_u(unicode_object): 
    return u' '.join(unicode_object.split()) 

def normalize_white_space_s(str_object): 
    return ' '.join(str_object.replace('\xA0', ' ').split()) 

歸納第二功能:通過一個單一的空間取代非標準空白字符的每一次出現,然後做分割聯接舞蹈。