Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字符串列表强制转换为混合数据类型_Python_String - Fatal编程技术网

Python 如何将字符串列表强制转换为混合数据类型

Python 如何将字符串列表强制转换为混合数据类型,python,string,Python,String,我有一个文件名列表,并根据给定的正则表达式提取一个ID元组。但是,这会产生字符串。实际ID是字符串和数字的组合,我希望将其转换为正确的数据类型。最好的处理方法是什么 我考虑了两种观点: 使用ast.literal\u eval进行评估 作为一个内置产品,它经过了很好的测试,比我合理生产的产品更通用。然而,它实际上可能过于笼统,可能会产生类似于None或bool的内容。这不是我当前数据的问题,但需要考虑将来的验证 编辑:使用literal_eval不起作用,因为类似“02”的内容不是有效的Pyth

我有一个文件名列表,并根据给定的正则表达式提取一个ID元组。但是,这会产生字符串。实际ID是字符串和数字的组合,我希望将其转换为正确的数据类型。最好的处理方法是什么

我考虑了两种观点:

使用ast.literal\u eval进行评估 作为一个内置产品,它经过了很好的测试,比我合理生产的产品更通用。然而,它实际上可能过于笼统,可能会产生类似于
None
或bool的内容。这不是我当前数据的问题,但需要考虑将来的验证

编辑:使用literal_eval不起作用,因为类似“02”的内容不是有效的Python表达式

保存规范 当前,正则表达式保存为字符串。该文件还可以包含如何解释每个捕获组的规范

一个非常基本的版本是只列出数据类型(string、int、float),然后像这样检查它们:

for i, spec in enumerate(specifications):
    if spec == 'int':
        ID[i] = int(ID[i])
    elif spec == 'float':
        ID[i] = float(ID[i])
    elif spec == 'string':
        pass
    else:
        raise ValueError(f'Incorrect Specification {spec} at index {i}')
但这似乎会在处理额外规范时引发人为错误,并引入额外的复杂性

我在这方面没有任何经验,所以我不知道陷阱是什么。这里最好的方法是什么

编辑: 文件名可能类似于“\u Set2\u CREE\u 1.79\u 0010APC.aver.dat” 它通过正则表达式转换为字符串列表
[“FOR”,“2”,“CREE”,“1.79”,“10”]
。 然后需要将其转换为
[“FOR”,2,“CREE”,1.79,10]


我无法控制ID的外观,因此这可能会有所不同。

以下函数将完成这项工作(适用于您提供的示例),但不能保证其效率或最低限度:

(当前计时:
42.8µs±4.69µs/回路(7次运行的平均值±标准偏差,每个10000个回路)

重新导入
def func(s):
#在‘’上拆分
l=s.split(“”)
#在“.”上分开
l=[x.split('.'),如果不是x.replace('.','',1).isdigit()否则在l中为x浮动(x)]
#展开任何嵌套列表
l=[x[0]如果类型(x)==列表且len(x)==1,则l中x的x为x]
l2=列表()
对于l中的i:
如果类型(i)=列表:
对于i中的j:
l2.追加(j)
其他:
l2.追加(i)
l=l2
打印('匹配的最终短名单:{}'。格式(l))
#执行基于正则表达式的过滤
l2=列表()
对于l中的x:
如果类型(x)==str:
pat1=r'([A-Z]*)([A-Z]*)(\d+)
pat2=r'[A-Z]+'
m1=重新匹配(第1部分,x)
m2=重新匹配(第2部分,x)
如果m1不是无:
l2.追加(int(m1.组(3)))
elif m2不是无:
l2.追加(m2.组(0))
其他:
l2.追加(x)
打印('Required terms:{}'。格式(l2))
s='对于设定值2\u CREE\u 1.79\u 0010APC.aver.dat'
func(s)
上述代码的输出:

匹配的最终候选名单:['for','Set2','CREE',1.79','0010APC','aver','dat']
所需条款:['FOR',2',CREE',1.79,10]

write please input string和那些规格请提供一些输入和输出示例您尝试了什么?请花点时间阅读和阅读。按照这些文章中的提示操作,你会得到更好的结果。@accdias我在文章中有两个选择。我不知道你说的“你尝试了什么?”还意味着什么,有两个选项,但没有代码演示它们。阅读文章,特别注意阅读。