将字符串转换为整数()

2 投票
4 回答
1725 浏览
提问于 2025-04-16 19:39

我有一个数据集,长得像这样:

0 _ _ 23.0186E-03  
10 _ _51.283E-03  
20 _ _125.573E-03

这些数字是逐行排列的(下划线代表空格)。

右边一列的数字现在是字符串的一部分。我想把右边的数字转换成数值(比如0.0230186等等)。一旦它们变成简单的数字形式,我可以用int()来转换,但我需要先把"E"处理一下才能做到。如果你知道怎么处理任何形式的E,比如E-01、E-22,那就太好了。

目前我的代码是这样的:

fin = open( 'stringtest1.txt', "r" )  
fout = open("stringtest2.txt", "w")

while 1:  
    x=fin.readline()

    a=x[5:-1]  
    ##conversion code should go here

    if not x:
        break

    fin.close()  
    fout.close()

4 个回答

2

如果我理解得没错,你想做的事情其实不需要对E进行任何处理:在Python中,使用float('23.0186E-03')会返回0.0230186,我想这就是你想要的结果。

你只需要:

fout = open("stringtest2.txt", "w")
for line in open('stringtest1.txt', "r"):
    x = float(line.strip().split()[1])
    fout.write("%f\n"%x)
fout.close()

在输出字符串中使用 %f,可以确保输出是十进制格式(没有E)。如果你只是用str(x),根据原始值的不同,输出可能会包含E,所以正确的转换方法取决于你想要什么样的输出:

>>> str(float('23.0186E-06'))
'2.30186e-05'
>>> "%f"%float('23.0186E-06')
'0.000023'
>>> "%.10f"%float('23.0186E-06')
'0.0000230186'

你可以在 %f 后面加上任何数字来指定小数点后的位数。想了解更多关于使用 % 进行字符串格式化的内容,可以查看 http://rgruet.free.fr/PQR26/PQR2.6.html#stringMethods(向下滚动到“使用 % 操作符进行字符串格式化”部分)。

4

你应该使用上下文管理器,文件句柄是可以被遍历的:

with open('test1.txt') as fhi, open('test2.txt', 'w') as fho:
  for line in fhi:
    f = float(line.split()[-1])

    fho.write(str(f))
5

我建议你可以这样进行转换:

float(x.split()[-1])

str.split() 这个方法在没有提供任何参数的情况下,会根据空格来分割字符串,而 float() 这个方法则可以把字符串转换成数字,比如:

>>> '20  125.573E-03'.split()
['20', '125.573E-03']
>>> float('20  125.573E-03'.split()[-1])
0.12557299999999999

撰写回答