从python中的字符串确定“值的类型”

从python中的字符串确定“值的类型”,第1张

概述我正在尝试在 python中编写一个函数,它将确定字符串中的值的类型;例如 如果in string为1或0或True或False,则该值为BIT 如果in string为0-9 *,则值为INT 如果在字符串中是0-9 .0-9,则该值为float 如果在字符串中是stg更多(文本等)值是文本 到目前为止,我已经喜欢了 def dataType(string): odp='' pattern 我正在尝试在 python中编写一个函数,它将确定字符串中的值的类型;例如

如果in string为1或0或True或False,则该值为BIT

如果in string为0-9 *,则值为INT

如果在字符串中是0-9 .0-9,则该值为float

如果在字符串中是stg更多(文本等)值是文本

到目前为止,我已经喜欢了

def dataType(string): odp='' patternBIT=re.compile('[01]') patternINT=re.compile('[0-9]+') patternfloat=re.compile('[0-9]+\.[0-9]+') patternTEXT=re.compile('[a-zA-Z0-9]+') if patternTEXT.match(string):     odp= "text" if patternfloat.match(string):     odp= "float" if patternINT.match(string):     odp= "INT" if patternBIT.match(string):     odp= "BIT" return odp

但是我在python中使用正则表达式并不是很熟练.你能告诉我,我做错了什么?例如,它不适用于2010-00-10,它应该是Text,但是INT或20.90,它应该是float但是是int

解决方法 在你走到正则表达式路线太远之前,你考虑过使用 ast.literal_eval

例子:

In [35]: ast.literal_eval('1')Out[35]: 1In [36]: type(ast.literal_eval('1'))Out[36]: intIn [38]: type(ast.literal_eval('1.0'))Out[38]: floatIn [40]: type(ast.literal_eval('[1,2,3]'))Out[40]: List

也可以使用Python为你解析它!

好的,这是一个更大的例子:

import ast,redef dataType(str):    str=str.strip()    if len(str) == 0: return 'BLANK'    try:        t=ast.literal_eval(str)    except ValueError:        return 'TEXT'    except SyntaxError:        return 'TEXT'    else:        if type(t) in [int,long,float,bool]:            if t in set((True,False)):                return 'BIT'            if type(t) is int or type(t) is long:                return 'INT'            if type(t) is float:                return 'float'        else:            return 'TEXT' testSet=['   1  ',' 0 ','True','False',#should all be BIT         '12','34l','-3','03',#should all be INT         '1.2','-20.4','1e66','35.','-   .2','-.2e6',#should all be float         '10-1','def','10,2','[1,2]','35.9.6','35..','.']for t in testSet:    print "{:10}:{}".format(t,dataType(t))

输出:

1      :BIT 0        :BITTrue      :BITFalse     :BIT12        :INT34l       :INT-3        :INT03        :INT1.2       :float-20.4     :float1e66      :float35.       :float-   .2    :float-.2e6     :float10-1      :TEXTdef       :TEXT10,2      :TEXT[1,2]     :TEXT35.9.6    :TEXT35..      :TEXT.         :TEXT

如果你肯定有一个正则表达式解决方案,产生相同的结果,这里是:

def regDataType(str):    str=str.strip()    if len(str) == 0: return 'BLANK'    if re.match(r'True$|^False$|^0$|^1$',str):        return 'BIT'    if re.match(r'([-+]\s*)?\d+[lL]?$',str):         return 'INT'    if re.match(r'([-+]\s*)?[1-9][0-9]*\.?[0-9]*([Ee][+-]?[0-9]+)?$',str):         return 'float'    if re.match(r'([-+]\s*)?[0-9]*\.?[0-9][0-9]*([Ee][+-]?[0-9]+)?$',str):         return 'float'    return 'TEXT'

我不能推荐高级版本的正则表达式;让Python解释它认为这些数据类型的内容而不是用正则表达式解释它们…

总结

以上是内存溢出为你收集整理的从python中的字符串确定“值的类型”全部内容,希望文章能够帮你解决从python中的字符串确定“值的类型”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存