Проверка Python на пустое значение CSV не работает - PullRequest
1 голос
/ 04 марта 2010

У меня есть файл 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)

Это пусто, и это не = '' или Нет, тогда wth делает это =?

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

Вероятно, это пробел, то есть табуляция или строка с пробелами, попробуйте: -

attrs[attr].strip()
3 голосов
/ 04 марта 2010

Предположительно, он содержит пробелы. Вы можете проверить это, напечатав repr(attrs[attr]), который будет заключать в кавычки и показывать вкладки в "\ t"

Измените код на if attrs[attr] is not None and attrs[attr].strip() !="":

1 голос
/ 04 марта 2010

Вы должны (почти) всегда нормализовать пробелы в любой текстовой строке, которая предназначена для вставки в базу данных (или для многих других целей).

Чтобы нормализовать пробелы, нужно (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())

Обобщение второй функции: замените каждое вхождение нестандартного символа пробела одним пробелом, а затем выполните танец с расщеплением.

...