【问题标题】:How to split and read raw data into different numpy arrays based on delimeter parameter如何根据分隔符参数将原始数据拆分并读取到不同的numpy数组中
【发布时间】:2022-12-19 14:33:56
【问题描述】:

我有以下形式的原始数据

#######
#######
#col1 #col2 #col3
1       10    100
2       11    150
3       14    155
#######
#######
#######
#######
#col1 #col2 #col3
1       14    100
2       17    180
3       14    155
#######
#######
#######
#######
#col1 #col2 #col3
1       19    156
2       27    130
3       24    152
#######
#######

我想将此数据加载到 NumPy 数组中。当我使用 numpy.loadtxt 加载它时,整个数据都被加载到一个数组中。有没有一种更简单的方法可以根据 ####### 行将这些数据分成不同的块?

【问题讨论】:

  • 你不能先把文件拆分成单独的文件,然后用numpy.loadtxt导入它们吗?此外,numpy.loadtxt 本身返回一个 ndarray 类型,这似乎不适合您的多数组输出需要。因此,您需要解决这个问题。
  • 这也有效,有没有简单的方法可以根据 #### 行将这些文件分成小块?
  • 分隔符总是 4 行,每行 7 个“#”吗?另外,文件中数据和分隔符旁边写的是什么?
  • 您好,是的,分隔符始终是 4 行,每行 7 个“#”。除了第一个块,它以两行 7# 开头。该文件包含几列浮点数。如有必要,我可以上传实际的数据文件,但它很大。
  • 没关系,模式只是每个表前两行,后两行。我在做

标签: python numpy


【解决方案1】:

一种简单的方法是读取文件,在分隔符处拆分获得的字符串,清除剩余的不必要的行并在这些字符串列表上使用 numpy.loadtext。 (如documentation 中所述,numpy.loadtext 中作为参数的字符串列表被视为行)

import numpy as np
from typing import List

filename: str = "data_file.txt" # Put your filename here instead

with open(filename, "r", encoding="utf-8") as file:
    content: str = file.read()

datas: List[str] = content.split(4 * "#######
")
arrays: List[np.ndarray] = []
for data in datas:
    data_list: List[str] = data.replace("#######
", "").split("
")
    arrays.append(np.loadtxt(data_list))

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2022-11-25
    • 2018-10-25
    • 1970-01-01
    • 2015-11-09
    • 2016-07-30
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多