Python:如何读取列数不均匀的数据文件

2024-09-30 22:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一个朋友需要阅读大量的数据(大约18000个数据集),这些数据都是格式化的。具体地说,数据应该是8列和大约8000行数据,但是数据以7列的形式传递,最后一个条目溢出到下一行的第一列。在

此外,每30行只有4列。这是因为一些上游程序正在将一个200 x 280阵列重塑为7x8120阵列。在

我的问题是:如何将数据读入8x7000数组。我平常的军火库np.loadtxt文件以及np.genfromtxt列数不均匀时失败。在

请记住,性能是一个因素,因为这必须为~18000个数据文件完成。在

以下是指向典型数据文件的链接: http://users-phys.au.dk/hha07/hk_L1.ref


Tags: 文件数据程序数据文件np朋友条目数组
3条回答

这个怎么样?在

data = []
curRow = []
dataPerRow = 8
for row in FILE.readlines():
    for item in row.split():
         if len(curRow) == dataPerRow:
             data.append(curRow)
             curRow = []
         curRow.Append(item)

data.append(curRow)

(假设文件是正在读入的文件) 然后你有一个列表列表,可以用来做任何事情。在

我想到了一种更简单的方法:

with open("hk_L1.ref") as f:
    data = numpy.array(f.read().split(), dtype=float).reshape(7000, 8)

这将首先以一维数组的形式读取数据,完全忽略所有新行字符,然后将其重塑为所需的形状。在

虽然我认为任务无论如何都是I/O绑定的,但是如果重要的话,这种方法应该使用很少的处理器时间。在

如果我正确理解您(请参阅我的评论),您可以将您的输入拆分为标记,然后以八个不清晰的块进行处理:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

f = open('filename.ref')
tokens = f.read().split()

rows = []
for idx, token in enumerate(tokens):
    if idx % 8 == 0:
        # this is a new row, use a new list.
        row = []
        rows.append(row)
    row.append(token)

# rows is now a list of lists with the desired data.

这在我的电脑里运行不到0.2秒。在

编辑:使用@SvenMarnach的建议。在

相关问题 更多 >