将字符串转换为int()

时间:2011-06-15 21:12:05

标签: python string int

我有一个如下所示的数据集:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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))

答案 2 :(得分: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(向下滚动到“使用%运算符进行字符串格式化”部分)。

答案 3 :(得分:1)

float("20 _ _125.573E-03".split()[-1].strip("_"))
相关问题