系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 脚本中心 > python > 详细页面

python numpy实现多次循环读取文件 等间隔过滤数据示例

时间:2020-03-14来源:电脑系统城作者:电脑系统城

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

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

python numpy实现多次循环读取文件 等间隔过滤数据示例

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

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

代码:


 
  1. import numpy as np
  2.  
  3. length=2500
  4. plt_arr=np.linspace(0.0, 0.0, length*2048*16)
  5. start=0
  6. tail_size = 40 #40bit
  7. num_size=16*1024-40 # 16kb -40b
  8.  
  9.  
  10. def one_file(f, loop):
  11. global tail_size, num_size
  12. while loop:
  13. num = np.fromfile(f, dtype=np.int16, count=num_size)
  14. tail=np.fromfile(f, dtype=np.int16, count=tail_size)
  15. loop=loop-1
  16. yield num, tail
  17.  
  18. def main():
  19. file_path="E://1-gl300c.r3f"
  20. global length, plt_arr, start
  21. loop=length
  22. with open(file_path, 'rb') as f:
  23. for num, tail in one_file(f, loop):
  24. plt_arr[start:start+len(num)]=num[:]
  25. start=start+len(num)
  26. return plt_arr[0:start]
  27.  
  28. if __name__ == "__main__":
  29. donser=main()
  30. print(donser)

假设数据文件的格式是 数据+包尾,plt_arr存储全部的数据部分,包尾丢弃,该方法实现了多次连续追加读取数据文件的内容plt_arr最好使用先开好大小再逐次赋值,亲测append方法和concatenate方法时间效率极差或者不用numpy也可以,代码:


 
  1. def read_in_chunks(filePath, chunk_size=16*1024):
  2. file_object = open(filePath,'rb')
  3. count=0
  4. while True:
  5. chunk_data = file_object.read(chunk_size)
  6. if not chunk_data:
  7. break
  8. yield chunk_data[0:16*1024-28]
  9.  
  10.  
  11. if __name__ == "__main__":
  12. num=0
  13. for chunk in read_in_chunks("E:\\1-gl300c.r3f"):
  14. #process(chunk) # <do something with chunk>
  15. name=str(num)+".bin"
  16. num=num+1
  17. if num<303000:
  18. continue
  19. if num>308001:
  20. break
  21. file_object = open(name, 'wb')
  22. file_object.write(chunk)
  23. file_object.close( )

numpy.fromfile的其他方法可以参考这个

补充知识:python每隔一段时间运行一个函数

用python语言每隔两分钟从接口获取一次数据来插入到数据库

看了大佬们的方法感觉最简单就是:

做一个死循环,让函数执行完后休眠两分钟,然后进入下一次执行,除非手动停止或者有错误停止,否则程序会永远运行下去。

以下是代码:


 
  1. import get_details
  2. import time
  3.  
  4. second=2*60
  5. print second
  6. while True:
  7. get_details.sign_cycle()
  8. time.sleep(second)

上面的代码就是让get_details模块的sign_cycle()函数每两分钟执行一次。

是不是超简单!!!!!!

以上这篇python numpy实现多次循环读取文件 等间隔过滤数据示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载