为什么Numpy.fromfile无法读取文件中的全部数值?
问题根因
你遇到的报错和少读1个数值的问题,核心是np.fromfile的文本读取逻辑缺陷:
np.fromfile设计初衷是更高效读取二进制数组文件,当你用文本模式打开文件、指定sep参数读取纯文本数值时,对文件末尾的空白(空格、换行、制表符等)识别存在bug:如果文件末尾多了一个空白分隔符,函数会判定为还有一个待读取的数值,但是读取不到有效内容,就会跳过最后一个有效数值,同时抛出你看到的DeprecationWarning。- 部分Windows平台下,文本模式
r打开文件时的自动换行符转换,也可能引入不可见字符干扰分隔识别,触发该问题。
解决方案
方案1(推荐):改用np.loadtxt读取文本数值文件
np.loadtxt是专门针对纯文本格式数值数组设计的读取函数,会自动处理首尾空白、多空格分隔、换行符等异常情况,不会出现少读问题:
import numpy as np a = np.loadtxt('commemi2d0.1.node', dtype=np.float64)
方案2:坚持用np.fromfile的调整方法
如果必须用np.fromfile,可以通过两种调整规避问题:
- 先读取文件内容清理首尾空白,再用
np.fromstring解析:
with open('commemi2d0.1.node', 'r') as fid: content = fid.read().strip() a = np.fromstring(content, dtype=np.float64, sep=" ")
- 改用二进制模式打开文件,避免换行符转换干扰:
with open('commemi2d0.1.node', 'rb') as fid: a = np.fromfile(fid, dtype=np.float64, sep=" ")
内容的提问来源于stack exchange,提问作者kaustav ghosal
相关产品推荐
相关产品推荐

