只打印非空值
Print only not null values
我试图只打印非空值,但我不确定为什么输出中甚至出现了空值:
输入:
from lxml import html
import requests
import linecache
i=1
read_url = linecache.getline('stocks_url',1)
while read_url != '':
page = requests.get(read_url)
tree = html.fromstring(page.text)
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage != None:
print percentage
i = i + 1
read_url = linecache.getline('stocks_url',i)
输出:
$ python test_null.py
['76%']
['76%']
['80%']
['92%']
['77%']
['71%']
[]
['50%']
[]
['100%']
['67%']
您得到的是空列表,而不是 None
个对象。你在这里测试错误的东西;你会看到 []
,而如果 Python null 被 return 编辑,你会看到 None
。 Element.xpath()
方法将总是return一个列表对象,它可以是空的。
使用布尔测试:
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage:
print percentage[0]
空列表(和 None
)在布尔上下文中测试为 false。我选择打印出 XPath 结果中的第一个元素,你似乎只有一个。
请注意,linecache
主要用于缓存 Python 源文件;它用于在发生错误时以及使用 inspect.getsource()
时显示回溯。它并不是真的要用来读取文件。您可以只使用 open()
并循环遍历文件,而不必不断递增计数器:
with open('stocks_url') as urlfile:
for url in urlfile:
page = requests.get(read_url)
tree = html.fromstring(page.content)
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage:
print percentage[0]
在您的代码中更改它,它应该可以工作:
if percentage != []:
我试图只打印非空值,但我不确定为什么输出中甚至出现了空值:
输入:
from lxml import html
import requests
import linecache
i=1
read_url = linecache.getline('stocks_url',1)
while read_url != '':
page = requests.get(read_url)
tree = html.fromstring(page.text)
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage != None:
print percentage
i = i + 1
read_url = linecache.getline('stocks_url',i)
输出:
$ python test_null.py
['76%']
['76%']
['80%']
['92%']
['77%']
['71%']
[]
['50%']
[]
['100%']
['67%']
您得到的是空列表,而不是 None
个对象。你在这里测试错误的东西;你会看到 []
,而如果 Python null 被 return 编辑,你会看到 None
。 Element.xpath()
方法将总是return一个列表对象,它可以是空的。
使用布尔测试:
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage:
print percentage[0]
空列表(和 None
)在布尔上下文中测试为 false。我选择打印出 XPath 结果中的第一个元素,你似乎只有一个。
请注意,linecache
主要用于缓存 Python 源文件;它用于在发生错误时以及使用 inspect.getsource()
时显示回溯。它并不是真的要用来读取文件。您可以只使用 open()
并循环遍历文件,而不必不断递增计数器:
with open('stocks_url') as urlfile:
for url in urlfile:
page = requests.get(read_url)
tree = html.fromstring(page.content)
percentage = tree.xpath('//span[@class="grnb_20"]/text()')
if percentage:
print percentage[0]
在您的代码中更改它,它应该可以工作:
if percentage != []: