numpy的np.fromfile会出现如下的问题,只能一次性读取文件的内容,不能追加读取,连续两次的np.fromfile读到的东西一样

如果数据文件太大(几个G或以上)不能一次性全读进去,需要追加读取

而我希望读到的donser1和donser2是连续的两段

(实际使用时,比如说读取的文件是二进制数据文件,每一块文件都包括包头+数据,希望将这两块分开获取,然后再做进一步处理)

代码:

import numpy as np

length=2500
plt_arr=np.linspace(0.0, 0.0, length*2048*16)
start=0
tail_size = 40 #40bit
num_size=16*1024-40 # 16kb -40b def one_file(f, loop):
global tail_size, num_size
while loop:
num = np.fromfile(f, dtype=np.int16, count=num_size)
tail=np.fromfile(f, dtype=np.int16, count=tail_size)
loop=loop-1
yield num, tail def main():
file_path="E://1-gl300c.r3f"
global length, plt_arr, start
loop=length
with open(file_path, 'rb') as f:
for num, tail in one_file(f, loop):
plt_arr[start:start+len(num)]=num[:]
start=start+len(num)
return plt_arr[0:start] if __name__ == "__main__":
donser=main()
print(donser)
假设数据文件的格式是 数据+包尾,plt_arr存储全部的数据部分,包尾丢弃,该方法实现了多次连续追加读取数据文件的内容 
plt_arr最好使用先开好大小再逐次赋值,亲测append方法和concatenate方法时间效率极差
或者不用numpy也可以,代码:
def read_in_chunks(filePath, chunk_size=16*1024):
file_object = open(filePath,'rb')
count=0
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data[0:16*1024-28] if __name__ == "__main__":
num=0
for chunk in read_in_chunks("E:\\1-gl300c.r3f"):
#process(chunk) # <do something with chunk>
name=str(num)+".bin"
num=num+1
if num<303000:
continue
if num>308001:
break
file_object = open(name, 'wb')
file_object.write(chunk)
file_object.close( )
numpy.fromfile的其他方法可以参考这个

最新文章

  1. could not read symbols: File format not recognized
  2. Android缓存学习入门(二)
  3. MVC视图中处理Json
  4. yii框架中邮箱激活(数字签名)
  5. c++学习-特殊类成员
  6. JAVA大数运算
  7. Object-C 设计类接口
  8. SQL流程控制语句学习(三):while break continue
  9. android的注意点
  10. 【English】20190428
  11. Mac 装机必备软件推荐
  12. Java:Copy-On-Write容器
  13. June 7. 2018 Week 23rd Thursday
  14. Unity Jobsystem 详解实体组件系统ECS
  15. LeetCode——2. Add Two Numbers
  16. Linux就业技术指导(五):Linux运维核心管理命令详解
  17. spring基础回顾
  18. 铁乐学python_Day42_锁和队列
  19. Docker网络 Weave
  20. jQuery插件Highcharts

热门文章

  1. 初试webpack打包
  2. python + selenium - 自动化环境搭建
  3. ccna学习指南第七版
  4. TOJ1698: Balanced Lineup
  5. [错误解决]UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 0-3: ordinal not in range(128)
  6. Hadoop全分布式模式安装
  7. 【Luogu】P4208最小生成树计数(状压乱搞)
  8. 【Luogu】P3355骑士共存问题(最小割)
  9. spring的事务传播与隔离
  10. jquery中object对象循环遍历的方法