python环境下从字符串中提取数字

您所在的位置:网站首页 用函数提取字符串中从左数第四个数字 python环境下从字符串中提取数字

python环境下从字符串中提取数字

2023-09-09 05:45| 来源: 网络整理| 查看: 265

标题:python环境下从字符串中提取数字

在实际编程应用中,经常需要从一堆文字中提取数值。笔者在爬虫应用中就遇到了这个问题,现找到两种解决方案,供参考!

一些环境准备类的话就不多说了,直接上代码!

将需要的一段文字以字符串的格式赋值给一个变量(string)。

方法一: string = "轻型车:共有198家企业4747个车型(12305个信息公开编号)15498915辆车进行了轻型车国六环保信息公开与上周汇总环比增加105个车型、386379辆车。其中,国内生产企业177家、4217个车型、14645390辆,国外生产企业21家、530个车型、853525辆;轻型汽油" # 字符串赋值 num_list = [i for i in string if str.isdigit(i)] # Python isdigit() 方法检测字符串是否只由数字组成。返回True or False. print(num_list)

打印出来的结果为 [‘1’, ‘9’, ‘8’, ‘4’, ‘7’, ‘4’, ‘7’, ‘1’, ‘2’, ‘3’, ‘0’, ‘5’, ‘1’, ‘5’, ‘4’, ‘9’, ‘8’, ‘9’, ‘1’, ‘5’, ‘1’, ‘0’, ‘5’, ‘3’, ‘8’, ‘6’, ‘3’, ‘7’, ‘9’, ‘1’, ‘7’, ‘7’, ‘4’, ‘2’, ‘1’, ‘7’, ‘1’, ‘4’, ‘6’, ‘4’, ‘5’, ‘3’, ‘9’, ‘0’, ‘2’, ‘1’, ‘5’, ‘3’, ‘0’, ‘8’, ‘5’, ‘3’, ‘5’, ‘2’, ‘5’]。我们发现,数字提取出来了,但是把原来的数值拆分成单个数字。并且仍以字符的格式保存为列表元素。那么有没有能够真实/完整的方法提取字符串中的数值呢?

方法二: string = "轻型车:共有198家企业4747个车型(12305个信息公开编号)15498915辆车进行了轻型车国六环保信息公开与上周汇总环比增加105个车型、386379辆车。其中,国内生产企业177家、4217个车型、14645390辆,国外生产企业21家、530个车型、853525辆;轻型汽油" # 字符串赋值 num_list_new = [] # 新建空列表,用以存储提取的数值 a = '' # 将空值赋值给a for i in string: # 将字符串进行遍历 if str.isdigit(i): # 判断i是否为数字,如果“是”返回True,“不是”返回False a += i # 如果i是数字格式,将i以字符串格式加到a上 else: a += " " # 如果i不是数字格式,将“ ”(空格)加到a上 # 遍历后,a的值为: # 198 4747 12305 15498915 105 386379 #177 4217 14645390 21 530 853525 #数字与数字之间存在许多空格,所以需要对字符串a按''进行分割。 num_list = a.split(" ") # 按''进行分割,此时a由字符串格式编程列表 print("num_list is \n", num_list) # 分割后,a的值为:['', '', '', '', '', '', '198', '', '', '4747', '', '', '', '12305', '', '', '', '', '', '', '', '15498915', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '105', '', '', '', '386379', '', '', '', '', '', '', '', '', '', '', '', '177', '', '4217', '', '', '', '14645390', '', '', '', '', '', '', '', '21', '', '530', '', '', '', '853525', '', '', '', '', '', '']。应该去掉空格,并将字符串格式的数字转化为int格式(主要是字符串中的数字皆为整数,如果有小数,应转化为float格式)。 for i in num_list: # 对列表a,进行遍历 try: # try 结构体,防止出错后直接退出程序 if int(i) > 0: num_list_new.append(int(i)) # 如果列表a的元素为数字,则赋值给num_list_new else: pass # 如果不是数字,pass except: pass print("num_list is \n", num_list_new) #打印出的结果[198, 4747, 12305, 15498915, 105, 386379, 177, 4217, 14645390, 21, 530, 853525]。是我们需要的数字。 print("len(num_list_new)", len(num_list_new)) # 作为验证,可以数一下列表元素个数 #打印结果为:12 方法三:

涉及字段提取,怎么可以忘记正则表达式!但需要引入re(正则表达式)模块。

import re string = "轻型车:共有198家企业4747个车型(12305个信息公开编号)15498915辆车进行了轻型车国六环保信息公开,与上周汇总环比增加105个车型、386379辆车。其中,国内生产企业177家、4217个车型、14645390辆,国外生产企业21家、530个车型、853525辆;轻型汽油" a = [] a = re.findall("\d+\.?\d*", string) # 正则表达式 print(a) # 打印结果:['198', '4747', '12305', '15498915', '105', '386379', '177', '4217', '14645390', '21', '530', '853525'] #for i in range(len(a)): # 列表a元素转化为int格式 # a[i] = int(a[i]) a = list(map(int,a)) #可以替代上面两行代码 print(a) # 打印结果[198, 4747, 12305, 15498915, 105, 386379, 177, 4217, 14645390, 21, 530, 853525]

程序简单,ok



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3