Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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_Numbers_Format - Fatal编程技术网

如何从表示为字符串的数字中检索Python格式代码?

如何从表示为字符串的数字中检索Python格式代码?,python,string,numbers,format,Python,String,Numbers,Format,我将数字数据存储在ASCII txt文件中,即不同参数的值,每个参数有一列。列之间的格式可能不同,但在列中不会更改。 我将数据加载到Python中,对其进行处理并将其写回ASCII文件问题是:数字的格式不应该改变。这意味着小数位数应该仍然相同,exp表示法应该仍然是exp表示法,依此类推。所以我需要的是一个函数,它为表示数字的每个字符串返回格式代码(然后在处理过程中,我可以将其与数字一起存储)注意:参数类型在处理过程中不会改变;i、 e.整数将保持整数,浮点数保持浮点数等(否则,保留格式代码没有

我将数字数据存储在ASCII txt文件中,即不同参数的值,每个参数有一列。列之间的格式可能不同,但在列中不会更改。 我将数据加载到Python中,对其进行处理并将其写回ASCII文件问题是:数字的格式不应该改变。这意味着小数位数应该仍然相同,exp表示法应该仍然是exp表示法,依此类推。所以我需要的是一个函数,它为表示数字的每个字符串返回格式代码(然后在处理过程中,我可以将其与数字一起存储)注意:参数类型在处理过程中不会改变;i、 e.整数将保持整数,浮点数保持浮点数等(否则,保留格式代码没有多大意义)

我的想法是使用正则表达式来分析字符串,以确定它是否是整数、浮点、指数表示法中的浮点等:

重新导入
字符串='3.142'
#阳性匹配,然后检测为
match=re.fullmatch(r'[+|-]*[0-9]+[.][0-9]*',string.strip())
按照这个一般分类,我将解析字符串以确定例如小数位数。比如说

string='3.142'#我从上面知道它是一个浮点数,而不是exp符号。。。
lst=string.strip().split('.'))
如果不是lst[1]:#尾随的零是隐藏的
如果lst[0]中的“+”,则结果=“{:+g}”,否则“{:g}”
其他:
结果='{0:+.'如果'+'在lst[0]中,则为'{0:'
结果+=str(len(lst[1]))+'f}
打印(结果)#给出…“{0:.3f}”
Q: 这似乎是一个相当笨拙的方法;
-有谁有更好的解决方案吗?

在思考了一段时间后,我对自己问题的回答是:由于缺乏信息,这是一种不可能的倒置

例如,假设您读取了一个字符串'-5.5'。那么,如果该数字的精度为1位,或者尾部的零刚刚隐藏,则您已经缺少信息。另一个(非数字)问题是,您不知道它是否是一个“有符号”值,即如果它是一个正数,它是否会是“+5.5”。想要更多吗?以“1.2E+1”为例。这可能是整数12。虽然不太可能,但您不能确定

除此之外,Python方面还有一些小限制,例如,据我所知,
{:e}.format()
将始终生成一个有符号、零填充的2位指数(如果是1: raise TypeError(“不明确的结果-->”,s,gen_类) #3.基于一般分类,调用字符串解析函数 方法\u name='parse\u'+str(gen\u类[0]) method=getattr(self,method_name,lambda*args:“未定义格式!”) 返回方法,*12月~9月 def解析dec(self、s、dec\u sep): lst=s.split(12月至9月) 如果len(lst[1])==0,则结果='{:f}',否则'{:.'+str(len(lst[1]))+'f}' result=result。如果lst[0]中的“+”,则替换(“:”,“:+”)else result 返回(结果,浮动) def解析否dec(self,s,*dec\u sep): 结果='{:+d}'如果'+'在s else'{:d}'中 返回(结果,整数) def parse_exp_dec(self、s、dec_sep): 第一次12月=s.split(12月-9月) lst_E=lst_dec[1].upper().split('E') 结果='{:.'+str(len(lst_E[0]))+'E}' 结果=结果。如果lst_dec[0]中的“+”,则替换(“:”,“:+”)否则结果 返回(结果,浮动) def解析表编号(self,s,*dec\u sep): lst_E=s.upper().split('E')) 如果lst_E[0]中的“+”,则结果=“{:+E}”,否则“{:E}” 返回(结果,浮动) 以及测试:

valid=['45','45','3E5','4E+5','3E-3','2.345E+7','-7',',
“-45.3”、“-3.4E3”、“12”、“8.8E1”、“+5.3”、“+4”,
“+10”、“+2.3E121”、“+4e-3”、“-204E-9668”、“.7”、“+7”]
无效=['tesT'、'Test45'、'7,7E2'、'204-100'、'

如果您有任何改进的想法,我很乐意将其包括在内!我想人们已经遇到了这个问题。

在思考了一段时间后,我对自己问题的回答是:由于缺乏信息,这是一种不可能的倒置

例如,假设您读取了一个字符串'-5.5'。那么,如果该数字的精度为1位,或者尾部的零刚刚隐藏,则您已经缺少信息。另一个(非数字)问题是,您不知道它是否是一个“有符号”值,即如果它是一个正数,它是否会是“+5.5”。想要更多吗?以“1.2E+1”为例。这可能是整数12。虽然不太可能,但您不能确定

除此之外,Python方面还有一些小限制,例如,据我所知,
{:e}.format()
将始终生成一个有符号、零填充的2位指数(如果是1: raise TypeError(“不明确的结果-->”,s,gen_类) #3.基于一般分类,调用字符串解析函数 方法\u name='parse\u'+str(gen\u类[0]) method=getattr(self,method_name,lambda*args:“未定义格式!”) 返回方法,*12月~9月 def解析dec(self、s、dec\u sep): lst=s.split(12月至9月) 如果len(lst[1])==0,则结果='{:f}',否则'{:.'+str(len(lst[1]))+'f}' result=result。如果lst[0]中的“+”,则替换(“:”,“:+”)else result 返回(结果,浮动) def解析否dec(self,s,*dec\u sep): 结果='{:+d}'如果'+'在s else'{:d}'中 返回(结果,整数) def parse_exp_dec(self、s、dec_sep): 第一次12月=s.split(12月-9月) lst_E=lst_dec[1].upper().split('E') 结果='{:.'+str(len(lst_E[0]))+'E}' 结果=结果。如果lst_dec[0]中的“+”,则替换(“:”,“:+”)否则结果 返回(结果,浮动) def解析表编号(self,s,*dec\u sep): lst_E=s.upper().split('E')) 如果lst_E[0]中的“+”,则结果=“{:+E}”,否则“{:E}” 返回(结果,浮动) 以及测试:

valid=['45','45','3E5','4E+5','3E-3','2.345E+7','-