我想用Python 3.10把一个字符串转换成一个浮点数。
问题在于字符串的格式。例如:
" 3.841-11"
其代表3.841E-011。
我试过古典音乐
float(" 3.841-11")
但这会产生误差。
只是改变这一个字符串是没有解决办法,因为我想读一个更大的文件,像这样:
$$
$$ GRID Data
$$
GRID 1 -44.0332667.9 -2.55271
GRID 2 -39.1406667.9 -2.26907
GRID 3 -34.2481667.9 -1.98544
GRID 4 -29.3555667.9 -1.70181
GRID 5 -24.4629667.9 -1.41817
GRID 6 -19.5703667.9 -1.13454
GRID 7 -14.6777667.9 -.850903
GRID 8 -9.78516667.9 -.567269
GRID 9 -4.89258667.9 -.283634
GRID 10 3.055-13667.9 3.841-11
GRID 11 4.892579667.9 .2836343
这是我的代码:
def read_fem(location):
mesh = open(location, 'r').read().splitlines()
point = []
for i in range(1, len(mesh)):
if '$' not in mesh[i]:
if 'GRID' in mesh[i]:
number = int(mesh[i][8:16])
x = float(mesh[i][24:32])
y = float(mesh[i][32:40])
z = float(mesh[i][40:48])
point.append([number, x, y, z])
感谢每一个答案。
2条答案
按热度按时间guicsvcw1#
使用pandas
IMO,最好不要手动解析你的文件,而是使用一个库。pandas是最理想的。开始阅读你的文件
pandas.read_fwf
,然后replace
的-
(或+
)前面的数字正确的指数形式,然后转换为浮点:输出:
旧答案
在转换为
float
之前,将-
替换为e-
:输出:
3.841e-11
如果您也可以使用
e+
,则更通用的方法是使用正则表达式:输出:
38410.0
修复文件的短程序
此函数读取
data.txt
并输出data_clean.txt
中的固定浮点数。我还看到了
3.055-13667.9
这样的数字,这是无效的,因为指数必须是整数。固定文件:
8ulbf1ek2#
以下方案将:
grid_data.txt
3.841-11
,并转换为3.841e-11
*忽略数字开头的连字符,例如
-44.0332
fix_float()
函数允许进行转换。\d(-)\d
代码:
输出: