【问题标题】:Converting string array to float array将字符串数组转换为浮点数组
【发布时间】:2016-12-05 10:23:36
【问题描述】:

我正在尝试从 .dat 文件中读取一些模拟结果并对其进行分析。 文件结构如下:

 N o d a l   D i s p l a c e m e n t s     Time       0.10000E+01
                                            Prop. Ld.  1.00000E+00

Node     1 Coord     2 Coord     3 Coord     1 Displ     2 Displ     3 Displ
   1  0.0000E+00  5.0000E-01  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00

   2  0.0000E+00  2.5005E-01  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00

   3  0.0000E+00  1.0000E-04  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00
   4  1.0000E+00  5.0000E-01  0.0000E+00 -1.9511E-04  4.0845E-04 -2.1522E-05

   5  1.0000E+00  2.5005E-01  0.0000E+00  1.1185E-08  4.0053E-04  2.6545E-09

   6  1.0000E+00  1.0000E-04  0.0000E+00  1.9511E-04  4.0847E-04  2.1526E-05

   7  2.0000E+00  5.0000E-01  0.0000E+00 -3.5177E-04  1.5287E-03 -1.2678E-05

...等等。

如何将数字数据转换为浮点数并删除字符串? 我用下面的代码试了一下:

class DataLoader:
    def __init__(self, number_files):
        self.number_files = number_files

    def loader(self):
        array = []

        for i in range(1, self.number_files + 1):
            try:
                if i < 10:
                    data = open("ndis_00%s.dat" % i, "r")
                elif i >= 10 and i <= 100:
                    data = open("ndis_0%s.dat" % i, "r")
            except IOError:
                print("I/O Error")

            for line in data:
                if line != "\n":
                    array.append(line.split())
                    try:
                        float(line)
                    except (ValueError, TypeError):
                        line[:] = []
                    print(line)

在代码中我想保留转换为float的行,不转换的字符串可以完全删除。

【问题讨论】:

    标签: arrays python-3.x typeconverter valueconverter


    【解决方案1】:

    如果文件的结构确实如上,则包含您想要的数据的行是非空的,并且不以字母字符开头。您可以按如下方式利用它:

    def extractData(f):
        data = []
        for line in f:
            line = line.strip()
            if len(line) == 0 or line[0].isalpha(): continue
            items = line.split()
            data.append([float(item) for item in items[1:]])
        return data
    

    上述函数采用这样一个文件并返回一个二维 Python 数组(列表列表),其中包含您感兴趣的浮点数据。

    测试(test.dat 包含您的样本数据):

    with open('test.dat') as testf:
        nums = extractData(testf)
        for row in nums: print(row)
    

    输出:

    [0.0, 0.5, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.25005, 0.0, 0.0, 0.0, 0.0]
    [0.0, 0.0001, 0.0, 0.0, 0.0, 0.0]
    [1.0, 0.5, 0.0, -0.00019511, 0.00040845, -2.1522e-05]
    [1.0, 0.25005, 0.0, 1.1185e-08, 0.00040053, 2.6545e-09]
    [1.0, 0.0001, 0.0, 0.00019511, 0.00040847, 2.1526e-05]
    [2.0, 0.5, 0.0, -0.00035177, 0.0015287, -1.2678e-05]
    

    如果这不起作用 - 您还没有充分定义文件的结构。

    【讨论】:

    • 谢谢。就是这样。
    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2015-03-20
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多