在Python中将带有科学计数法的字符串转换为整数

16
我试图将一个 txt 文件中的一组字符串转换为列表中的整数。我找到了一段很好的代码片段,可以返回每一行,然后我尝试将其转换为一个整数。问题在于这些数字是科学计数法表示的,会出现如下错误:ValueError: invalid literal for int() with base 10: '3.404788e-001'。
这是我一直在摆弄的代码:
data = []
rawText = open ("data.txt","r")

for line in rawText.readlines():
    for i in line.split():
        data.append(int(i))

print data[1]
rawText.close()

它们不仅仅是“科学计数法”; 它们代表非整数。您希望为输入“3.404788e-001”获得什么结果? - Karl Knechtel
2个回答

21

如果您在处理浮点数时需要精度,请使用float(i)或者decimal.Decimal(i),其中float会使用机器精度IEEE浮点数来存储数字,而Decimal则会保留完整的精度,但速度较慢。
此外,您可以遍历打开的文件,无需使用readlines()
并且一个单一的列表推导式即可完成您需要的所有操作:

data = [float(number)
        for line in open('data.txt', 'r')
        for number in line.split()]

如果你只需要整数,可以使用 int(float(number))


5

您的字符串看起来像是一个 float,因此首先需要将其转换为 float


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接