У меня есть файл 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 делает это =?
Вероятно, это пробел, т.е. табуляция или строка с пробелами: -
attrs[attr].strip()
Предположительно он содержит пробелы. Вы можете проверить это, напечатав repr(attrs[attr])
, который будет помещать кавычки вокруг него и отображать вкладки в "\ t"
Измените код на if attrs[attr] is not None and attrs[attr].strip() !="":
if attrs[attr] is not None and attrs[attr].strip() !="":
Вы должны (почти) всегда нормализовать пробелы в любой текстовой строке, предназначенной для вставки в базу данных (или для многих других целей).
Чтобы нормализовать пробелы, необходимо: (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.
None
изcsv.reader
?