python numpy.loadtxt() 由于 txt 文件中的二进制字符而崩溃

问题描述 投票:0回答:1

我正在使用这一行读取 txt 文件中的部分行,跳过页眉和页脚。

np_data= np.loadtxt(file, delimiter= "\t", skiprows=12, max_rows= 1024)

问题在于页脚中有这个字符:∞,导致出现如下错误

UnicodeDecodeError:“utf-8”编解码器无法解码位置 4729 中的字节 0xb0:无效的起始字节

有没有办法跳过该字符或行?对我来说,skiprows 和 max_rows 的组合似乎不起作用。 谢谢你

python numpy character-encoding file-read
1个回答
0
投票

有办法跳过那行(...)吗?

numpy.loadtxt
第一个参数可能是

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

因此,您可以封装文件句柄来跳过您不想要的行,请考虑以下简单示例,让

file.csv
内容为

1,2,3
4,∞,6
7,8,9

然后

import numpy as np
with open("file.csv","rb") as f:
    arr = np.loadtxt(filter(lambda x:b"\xe2\x88\x9e" not in x,f), delimiter=",")
print(arr)

提供输出

[[1. 2. 3.]
 [7. 8. 9.]]

说明:我以二进制模式打开

file.csv
,然后使用
filter
从文件句柄
f
中选择不包含字节序列
\xe2\x88\x9e
(在 Unicode 中为 Infini)的行

© www.soinside.com 2019 - 2024. All rights reserved.