如何检查Python中的许多变量是否为空?
我正在为OpenData编写一个python刮板代码,并且我有一个问题:如何检查所有值是否未填充到站点中,以及它是否为null将值更改为null。我的刮板是here。如何检查Python中的许多变量是否为空?
目前我正在努力优化。
我现在变量样子:
evcisloval = soup.find_all('td')[3].text.strip()
prinalezival = soup.find_all('td')[5].text.strip()
popisfaplnenia = soup.find_all('td')[7].text.replace('\"', '')
hodnotafaplnenia = soup.find_all('td')[9].text[:-1].replace(",", ".").replace(" ", "")
datumdfa = soup.find_all('td')[11].text
datumzfa = soup.find_all('td')[13].text
formazaplatenia = soup.find_all('td')[15].text
obchmenonazov = soup.find_all('td')[17].text
sidlofirmy = soup.find_all('td')[19].text
pravnaforma = soup.find_all('td')[21].text
sudregistracie = soup.find_all('td')[23].text
ico = soup.find_all('td')[25].text
dic = soup.find_all('td')[27].text
cislouctu = soup.find_all('td')[29].text
输出:
scraperwiki.sqlite.save(unique_keys=["invoice_id"],
data={ "invoice_id":number,
"invoice_price":hodnotafaplnenia,
"evidence_no":evcisloval,
"paired_with":prinalezival,
"invoice_desc":popisfaplnenia,
"date_received":datumdfa,
"date_payment":datumzfa,
"pay_form":formazaplatenia,
"trade_name":obchmenonazov,
"trade_form":pravnaforma,
"company_location":sidlofirmy,
"court":sudregistracie,
"ico":ico,
"dic":dic,
"accout_no":cislouctu,
"invoice_attachment":urlfa,
"invoice_url":url})
我GOOGLE了它,但没有成功。
刚刚看了你的连接纽带,它似乎你想要的是
evcisloval = soup.find_all('td')[3].text.strip() or "NULL"
但要小心。你应该只用字符串来做到这一点。如果or
之前的部分为空或者False
或None
,或0
,他们都将与"NULL"
感谢这有助于快速:) – 2015-02-11 11:30:43
这是我的python scraper。也许它有助于某人: http://pastebin.com/j911H5qZ – 2015-05-01 19:09:55
一个git diff可能更有用https://github.com/Pytlicek/SK_Prison_and_Court_Guard/commit/9c528b59406a940e1bcf305ebd69a912b19bc997 – 2015-05-04 10:38:36
首先,写出的形式的变量的结构字典:
conf = {'evidence_no': (3, str.strip),
'trade_form': (21, None),
...}
即关键是输出键,值是ID的从soup.find_all('td')
并且具有要被施加到的可选功能的元组结果,否则为None
。您不需要那些可能会混淆其他SO成员的斯拉夫变量名称。
然后遍历conf
并填写data
字典。
另外,在循环之前运行soup.find_all('td')
。
tds = soup.find_all('td')
data = {}
for name, (num, func) in conf.iteritems():
text = tds[num].text
# replace text with None or "NULL" or whatever if needed
...
if func is None:
data[name] = text
else:
data[name] = func(text)
这将删除大量重复的代码。更容易维护。
此外,我不确定字符串"NULL"
是写入缺失数据的最佳方式。 sqlite是否支持Python的真实None
对象?
_if取代它为空值更改为null_:如果是'null',那么它已经是'null',你什么都不做。你的意思是“空”作为一个字符串? – rodrigo 2015-02-11 09:53:06
如果这些值未填满,它们将会是什么? – 2015-02-11 10:06:17
如果你运行批量上传,你需要有一些东西作为价值。实际日期或无效。刮过的网站有两个日期值,一个用于接受发票,另一个用于发票付款。如果你的弹力十足,你可以选择这个日期。但是另一个用例是从具有空值的弹性字段中选择,然后通知本网站的系统管理员他没有好的数据并且与法律相冲突。 – 2015-02-11 11:47:42