这是我第一次尝试构建非Web的东西并涉及逻辑编码。
请在下面查看这本令人敬畏的字典:
Messy_Dict=
{
'name': "['\\r\\n NASDAQ: BKEP\\r\\n ']",
'underlying': "['1.12']",
'strike_prices_list': ["['2.50'", " '5.00'", " '7.50']"],
'call_bid': ["['\\r\\n0.05 '", " '\\r\\n0.00 '", " '\\r\\n0.00 ']"],
'put_ask': ["['\\r\\n2.10 '", " '\\r\\n4.50 '", " '\\r\\n7.00 ']"]
}
我想做的是清理每个字典值中不必要的子字符串,以获得类似这样的内容:
Clean_Dict=
{
'name': "BKEP",
'underlying': "1.12",
'strike_prices_list': ["2.50", "5.00", "7.50"],
'call_bid': ["0.05", "0.00", "0.00"],
'put_ask': ["2.10", "4.50", "7.00"]
}
我设法从 Messy_Dict 升级到 Clean_Dict ,但是我使用了很野蛮的方法。我只是说它包括一个for循环和多个strip(),replace('','')方法。而且让我很难看清.py文件中的那段代码。
所以我想,在执行将Messy_Dict转换为Clean_Dict的所需任务时,是否还有一种更优雅的方法?我感觉好像我的基本面中缺少什么。
def parse(self, response):
strike_prices_main = response.css('.highlight , .aright .strike-col').css('::text').extract()
if not strike_prices_main:
pass
else:
name = response.css('#instrumentticker::text').extract()
strike_prices_list = response.css('.aright .strike-col').css('::text').extract()
call_bid = response.css('.aright td:nth-child(5)').css('::text').extract()
put_ask = response.css('.aright td:nth-child(14)').css('::text').extract()
underlying = response.css('.pricewrap .bgLast').css('::text').extract()
file.write('%s|%s|%s|%s|%s\n'%(name,underlying,strike_prices_list,call_bid,put_ask))
使用蜘蛛爬行!
答案 0 :(得分:0)
也许是这样的:
Usage: autopypi [OPTIONS] PKG_DIR
Python command line tool to setup Python package automatically.
Example: $ autopypi your-package-root-directory -r
Example: $ cd your-package-root-directory
$ autopypi . -r
Options:
-r, --real Use the real PyPi index (instead of test PyPi).
--help Show this message and exit.
答案 1 :(得分:-1)
您可以使用正则表达式。
示例:
import re
messy_dict = {
'name': "['\\r\\n NASDAQ: BKEP\\r\\n ']",
'underlying': "['1.12']",
'strike_prices_list': ["['2.50'", " '5.00'", " '7.50']"],
'call_bid': ["['\\r\\n0.05 '", " '\\r\\n0.00 '", " '\\r\\n0.00 ']"],
'put_ask': ["['\\r\\n2.10 '", " '\\r\\n4.50 '", " '\\r\\n7.00 ']"]
}
for key in messy_dict:
stripfunc = lambda x: re.sub('[^\d\.]', '', str(x))
if type(messy_dict[key]) is list:
messy_dict[key] = [stripfunc(x) for x in messy_dict[key]]
else:
messy_dict[key] = stripfunc(messy_dict[key])
print(messy_dict)
说明:[^]匹配集合中未包含的任何内容。 \ d用于数字值,反斜杠转义点。使用str(val)将字符串从列表中删除。
输出:{'name': '', 'underlying': '1.12', 'strike_prices_list': ['2.50', '5.00', '7.50'], 'call_bid': ['0.05', '0.00', '0.00'], 'put_ask': ['2.10', '4.50', '7.00']}
编辑:只是注意到您还想保留该点。更新了代码。