我是Python的新手,对于这样一个noob问题感到抱歉,但我对以下代码有两个问题:
1)我试图从网站上抓取数据,但我在通过for
循环以外的任何其他方式获取数据时遇到问题,因此我需要继续使用{{ 1}}以便能够在以下命令中将值赋给变量:
print
2)接下来我尝试将特定值(例如receivables2017 = receivables2017.string
)分配给Receivables2017
字典,但我无法以字典的形式获取字典中的值稍后需要aapl
或float
来应用于公式。
非常感谢帮助,谢谢!
int
答案 0 :(得分:2)
您不需要for
循环来将值分配给变量:
for receivables2016 in soup.find_all('td')[40]:
print(receivables2016.string)
可缩短为:
receivables2016 = soup.find_all('td')[40].string
如果你试图迭代汤的元素,它确实会产生一个对象,即使它只包含一个元素。这就是它如何设计工作。但它实际上是一个包含一些数据的元素,不一定是可迭代的(列表,元组等)。 你应该看看python的迭代器和生成器: https://anandology.com/python-practice-book/iterators.html#the-iteration-protocol
如果您不想要一段代码来执行任何操作,请使用pass
for i in range(10):
pass # will iterate 10 times but won't don anything
或者,如果您定义了一个功能但尚未决定实施:
def my_funct():
pass
如果调用my_funct
,它将默认返回None
,因为没有声明返回值。
我看到你想要在dict中拥有的值的小数点为,
。如果它是一个字符串,您可以轻松地用点替换逗号并在之后将其转换为浮点数:
aapl = {'Cash & Cash Equivalents':
{'2017': float(cash_and_equivalents2017.replace(",", ".")),
'2016': float(cash_and_equivalents2016.replace(",", "."))},
'Receivables':
{'2017': float(receivables2017.replace(",", ".")),
'2016': float(receivables2016.replace(",", "."))}
}
使用python的内置int()
函数,您可以将数字字符串转换为整数。请记住,即使是字符串格式,它们也必须是有效的整数。这不会起作用,会抛出ValueError
:
int(receivables2016.replace(",", "."))
在这种情况下,您必须将字符串转换为float并转换为整数:
int(float(receivables2016.replace(",", ".")))
答案 1 :(得分:0)
我不确定这是否是您正在寻找的,但是:
aapl = dict([('Cash & Cash Equivalents 2017', cash_and_equivalents2017),
('Cash & Cash Equivalents 2016', cash_and_equivalents2016),
('Receivables 2017', receivables2017),
('Receivables 2016', receivables2016)])
print(aapl)
让我回来:
{'Cash & Cash Equivalents 2016': '67,155', 'Receivables 2016': '29,299', 'Cash & Cash Equivalents 2017': '74,181', 'Receivables 2017': '35,673'}