Проверка Python на пустое значение CSV не работает

1

У меня есть файл CSV, и я запускаю script против него для вставки в базу данных. Если значение пустое, я не хочу его вставлять. Вот что я

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, тогда wth делает это =?

  • 0
    Просто чтобы быть понятным, он вставляет пустые значения независимо от оператора if, пытающегося предотвратить его.
  • 0
    Как вам удается получить значения None из csv.reader ?
Теги:
csv
null

3 ответа

4
Лучший ответ

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

attrs[attr].strip()
  • 1
    пробел гррр
  • 0
    Спасибо, я тоже не видел, чтобы вы предлагали функцию стриптиза.
3

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

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

  • 0
    Я думал о том, чтобы найти функцию для удаления пробелов, но я не хотел, чтобы она была полосатой, если только не было пробелов, но это имеет смысл.
  • 1
    Strip - это строковая функция-член, не так ли? Так что вам нужно, if attrs[attr] is not None and attrs[attr].strip() !="":
Показать ещё 2 комментария
1

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

Чтобы нормализовать пробелы, необходимо: (1) лишить любые ведущие пробелы (2) удалить любые конечные пробелы (3) заменить любые пробелы (длинa >= 1) пробелов ровно на 1 пробел (U + 0020).

Пробелы не должны ограничиваться тем, что предоставляет стандартный Python, особенно если вы работаете в Python 2.X и не используете объекты unicode. Например, в локали "C" по умолчанию "\ xA0" не рассматривается как пробел, но он, скорее всего, будет представлять NO-BREAK SPACE (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())

Обобщая вторую функцию: замените каждое появление нестандартного символа пробела на единое пространство, а затем выполните танец split-join.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню