我有一个如下所示的数据集:
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()
答案 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("_"))