Python检查空CSV值失败

1 投票
3 回答
2643 浏览
提问于 2025-04-15 19:59

我有一个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(没有值),那它到底等于什么呢?

3 个回答

1

在任何打算放入数据库的文本字符串中,你几乎总是应该规范化空白字符(或者用于其他很多目的)。

规范化空白字符就是要做以下三件事: (1) 去掉开头的空白 (2) 去掉结尾的空白 (3) 把中间连续的空白(长度大于等于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())

对第二个函数进行一般化:把每个非标准空白字符替换成一个空格,然后再进行分割和连接的操作。

3

这里可能有空格。你可以通过打印 repr(attrs[attr]) 来检查一下,这样会把内容用引号括起来,并且把制表符显示为 "\t"

把代码改成 if attrs[attr] is not None and attrs[attr].strip() !="": 这样写。

4

这可能是空白字符,也就是一个制表符或者是包含空格的字符串。你可以试试下面的代码:

attrs[attr].strip()

撰写回答