【问题标题】:Python: trouble reading number formatPython:读取数字格式时遇到问题
【发布时间】:2013-11-30 19:53:43
【问题描述】:

我正在读取一个数字列为 -4.8416932597054D-04 的文件,其中 D 是科学记数法。我以前从未见过这种符号。 Python 如何将 -4.8416932597054*D*-04 读取为 -4.8416932597054*E*-04 我查看了其他问题,但没有阅读任何解决此问题的内容? (或者我有但没有认出来。)谢谢。

【问题讨论】:

    标签: python string-formatting


    【解决方案1】:
    def to_float(s):
        return float(s.lower().replace('d', 'e'))
    

    编辑:你能举一个输入字符串的例子,它仍然给你“同样的错误”吗?因为to_float('-4.8416932597054D-04') 非常适合我,所以返回-0.00048416932597054。

    【讨论】:

    • 我仍然遇到同样的错误。我刚刚发现其他讨论将 D 识别为 FORTRAN 科学记数法,将 numpy 识别为 FORTRAN 友好。我已经为其他目的导入了 numpy,所以也许有办法。 stackoverflow.com/questions/1959210/…
    • 对不起,我一开始做错了。我得到“'int'对象没有属性'lower'”
    • 我还应该补充一点,我将使用该函数来读取数组中的元素。例如 to_float(col_C),col_C 是从文本文件中读取的一维数组。
    • @user3052914:所以不要将它传递给 int!从文件中读取一个字符串,将其传递给 to_float,然后取回一个浮点值。
    • def to_float(s): ----> 2 return float(s.lower().replace('d', 'e')) 3 4 col_C='-4.8416932597054D-04 ' 5 ValueError:无法将字符串转换为浮点数:col_c
    【解决方案2】:

    你理解这个符号吗?如果是这样,您可以利用您的知识来解决这个问题。用数字进行字符串格式化,解析它,使用正则表达式从数字中提取D-04并将其转换为更多数字的字符串,附加到原始字符串并让Python对其进行转换。

    没有适用于世界上每个案例或每个数据模型的 Python 模块,我们(尤其是您)必须创建自己的解决方案。


    示例:

    def read_strange_notation(strange_number):
        number, notation = strange_number.split('D-')
        number, notation = int(number), int(notation)
        actual_number = number ** notation # here I don't know what `D-` means, 
                                           # so you do something with these parts
        return actual_number
    

    【讨论】:

    • 我现在明白这个符号了。但是,我不知道如何解析、提取、翻译和附加它。你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2019-01-28
    • 2021-04-09
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多