我看到了许多类似的帖子,但是似乎没有一个适合我的问题。对不起,如果我错过了。

我正在抓取一个很大的HTML表,并对它进行格式化,以便可以将其输入数据库。一条记录有一个空白列,当我尝试时会导致NoneType错误

print "|".join(record)


因为记录看起来像

(data, ... , None, data)


我试图通过在创建记录元组之前应用以下内容来过滤掉None:

def null_converter(field):
    return field.string if field else "NULL"


但这似乎不起作用。有没有更好的方法来解决这个问题?

最佳答案

删除None值:

record = ("data", None, "data")
[x for x in record if x is not None]
['data', 'data']


如果确定没有虚假值:

print filter(None,record)
('data', 'data')


要么:

  "|".join(map(str,records))
 In [6]: "|".join(map(str,d))
 Out[6]: 'data|None|data'


一些时间:

In [9]: d = ("data", None, "data") * 100

In [10]: %timeit [x if x is not None else "Null" for x in d ]
10000 loops, best of 3: 22.8 µs per loop

In [11]: %timeit "|".join(map(str,d))
10000 loops, best of 3: 38.9 µs per loop

In [12]: %timeit "|".join((str(field) for field in d))
10000 loops, best of 3: 66.3 µs per loop


map比循环和强制转换更有效,但list comp是最快的。

关于python - BeautifulSoup/Python发生NoneType错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25090223/

10-10 04:18