2010-05-12 36 views
6

Tôi có một tệp lớn với các số ở dạng 6,52353753563E-7. Vì vậy, có một số mũ trong chuỗi đó. float() chết trên này.Phân tích một chuỗi đại diện cho một phao * với số mũ * trong Python

Trong khi tôi có thể viết mã tùy chỉnh để xử lý trước chuỗi thành một cái gì đó float() có thể ăn, tôi đang tìm cách chuyển đổi chúng thành một phao (giống như một chuỗi định dạng được chuyển đi đâu đó). Tôi phải nói rằng tôi ngạc nhiên float() không thể xử lý các chuỗi với một số mũ như vậy, đây là công cụ khá phổ biến.

Tôi đang sử dụng python 2.6, nhưng 3.1 là tùy chọn nếu cần.

Trả lời

13

Không có gì để làm với số mũ. Vấn đề là dấu phẩy thay vì dấu thập phân.

>>> float("6,52353753563E-7") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 6,52353753563E-7 
>>> float("6.52353753563E-7") 
6.5235375356299998e-07 

Đối với một cách tiếp cận chung, xem locale.atof()

+0

Đúng. Ngẫu nhiên, nếu bạn nhập "6,52353753563E-7" vào dấu nhắc Python, nó sẽ được phân tích cú pháp thành bộ tuple (6, 5235.3753563) - khá hiển nhiên tại sao, nó trông có vẻ lạ. –

+0

Ah, cảm ơn. Tôi sẽ đánh dấu nó là được chấp nhận khi bộ đếm thời gian cho phép tôi. – Lucas

+0

Trên một lưu ý liên quan, tôi có thể bằng cách nào đó làm cho python nhận ra dấu phẩy? C# và Java có thể làm điều này. Nhiều nơi trên thế giới sử dụng dấu phẩy làm dấu phân cách thập phân. – Lucas

1

Vấn đề của bạn không nằm trong số mũ nhưng trong dấu phẩy. với trăn 3.1:

>>> a = "6.52353753563E-7" 
>>> float(a) 
6.52353753563e-07 
Các vấn đề liên quan