【问题标题】:Numpy genfromtxt() skip invalid linesNumpy genfromtxt() 跳过无效行
【发布时间】:2021-07-13 08:31:17
【问题描述】:

我正在使用 Numpy 的 genfromtxt() 函数来获取大量的 txt 数据作为数组。 数据格式如下:

2020-05-20 16:54:01.807645  1033.074    2392.555    256.8516    2700.547    1029.691    2108.094    3256.539    90.94727    1775.043    4.770321    48.875

日志文件还包含如下行:

2020-05-20 17:05:21.864533  DUT stopped

我想跳过这些行。有办法吗?

我目前的做法:

values = np.genfromtxt(fi, dtype="S32,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8", missing_values='', delimiter="\t", invalid_raise=False, filling_values=0)

感谢您的帮助

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    根据the manual,您还可以将生成字节串(行)的生成器传递给np.genfromtxt()。

    fname

    • 文件、str、pathlib.Path、str 列表、生成器

    要读取的文件、文件名、列表或生成器。如果文件扩展名是 gz 或 bz2,则首先解压缩文件。请注意,生成器必须返回字节字符串。列表中的字符串或由生成器生成的字符串被视为行。

    def skip_stopped_lines(fi):
        for line in fi:
            if b"DUT stopped" in line:
                # Don't yield this line, we don't want it
                continue
            yield line
    
    
    # NB: not using `with` to avoid the file being closed
    #     while the generators are active
    
    fi = open("somefile.txt", "rb")  # note binary mode
    skipper = skip_stopped_lines(fi)
    values = np.genfromtxt(
        skipper,
        dtype="S32,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8",
        missing_values="",
        delimiter="\t",
        invalid_raise=False,
        filling_values=0,
    )
    

    可能会为您解决问题。

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 1970-01-01
      • 2013-05-28
      • 2013-11-29
      • 1970-01-01
      • 2012-05-10
      • 2013-01-14
      • 1970-01-01
      • 2015-11-20
      相关资源
      最近更新 更多