问题
知乎上看到一个问题,python如何从字符串中提取信息?
回答了一下,在这里分享出来。
原问题:
仔细阅读问题描述,作为一个结果主义者,我肯定是选择更简单的方法,虽说正则表达式无所不能,但我这个小菜鸡怎么可能完全掌握呢,都是需要用时才去查,而对于这个问题,我觉得,只用一个函数足矣。
那就是:str.split(str="", num=string.count(str))
参数解释:
str:分隔符。默认为所有的空字符,包括空格、换行(\n)等。
num:分割次数。默认为 -1, 意思是分隔所有。
代码如下:
# 将原始字符串赋值给str并打印
str = 'Linux操作系统/(1-2节)1-7周(单)/王某某/20大数据11;20大数据12/必修/教学班人数:55/无/8/48\n网页样式/(1-2节)10-16周/苏某/20网络41/必修/教学班人数:63/无/8/56\n移动应用开发基础/(1-2节)17周/张某/20移动51;20移动52/必修/教学班人数:64/无/8/80'
print ('原始字符串是:',str)
# 根据换行符分割原始字符串,将值赋值给列表并打印
list = str.split('\n')
print(list)
# 定义字典dict
dict = {}
# 将列表中每个元素以’/‘为准进行分割,将其值存入字典,其中字典的键我用数字表示,方便后面对其元素进行操作
for i in range(len(list)):
dict[i] = list[i].split('/')
# 打印字典
print(dict)
# 保留需要的数据,也就是删除无用数据
for i in range(len(dict)):
# 注意:删除的应该是原来字典的每个元素(列表)中的1,4,6,7(从0开始)号元素,但由于我们删除一个之后,列表更新,后面的序号就向前进一位。
# 因此,需要删序号为[1],[4-1],[6-1-1],[7-1-1-1]的元素
del dict[i][1],dict[i][3],dict[i][4],dict[i][4]
print(dict)
# 之后,就可以根据您的需要给第一步的str赋值,直接对字典操作取值了。
# 对您所表述的这种格式的字符串都适用。
代码里面的注释详细的不能再详细了,就不做赘述了。
思路
爬虫,肯定要有数据处理,因为我们的目的是爬取数据,筛选出有用的数据,再进行数据分析,通过分析,得出结论。这是整个一个流程。
其中,爬取数据和分析数据都还可以参照别的,但爬取到的数据形态各异,要想得到有用的数据,必须对其进行提取处理,而最牛的莫过于正则表达式了,但是,并不是人人都是正则大佬,我们只要能解决问题便好,管他黑猫白猫,抓住老鼠的就是好猫。
因此,针对字符串,首先要考虑的应该是字符串处理的常见函数,比如:strip、split等,这些函数完全可以理解为别人写好的正则,那如果能用,谁不用谁傻。。。
哈哈哈,具体函数用法一搜一大堆,根据需求自行选用喔。
当然,在碰到复杂的,难处理的数据,正则表达式还是很牛的,就是个人觉得有yi点点难,我一般都是需要啥查啥的。
很重要的提醒:
一定要擅于用列表和字典,不要傻乎乎对着一个长长的字符串就是一顿输出,对于像这个问题中的字符串,特征是非常明显的,直接冲就完了。
这个问题的题主表达的他的困难之处就在于不知道一个字符串里究竟有几门课,那还不简单,python又没让你定义列表和字典的时候告诉它是具体有几个键、值,这玩意具体有多香,谁用谁知道。