python numpy实现多次循环读取文件 等间隔过滤数据示例
numpy的np.fromfile会出现如下的问题,只能一次性读取文件的内容,不能追加读取,连续两次的np.fromfile读到的东西一样
如果数据文件太大(几个G或以上)不能一次性全读进去,需要追加读取
而我希望读到的donser1和donser2是连续的两段
(实际使用时,比如说读取的文件是二进制数据文件,每一块文件都包括包头+数据,希望将这两块分开获取,然后再做进一步处理)
代码:
importnumpyasnp 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 defone_file(f,loop): globaltail_size,num_size whileloop: num=np.fromfile(f,dtype=np.int16,count=num_size) tail=np.fromfile(f,dtype=np.int16,count=tail_size) loop=loop-1 yieldnum,tail defmain(): file_path="E://1-gl300c.r3f" globallength,plt_arr,start loop=length withopen(file_path,'rb')asf: fornum,tailinone_file(f,loop): plt_arr[start:start+len(num)]=num[:] start=start+len(num) returnplt_arr[0:start] if__name__=="__main__": donser=main() print(donser)
假设数据文件的格式是数据+包尾,plt_arr存储全部的数据部分,包尾丢弃,该方法实现了多次连续追加读取数据文件的内容plt_arr最好使用先开好大小再逐次赋值,亲测append方法和concatenate方法时间效率极差或者不用numpy也可以,代码:
defread_in_chunks(filePath,chunk_size=16*1024): file_object=open(filePath,'rb') count=0 whileTrue: chunk_data=file_object.read(chunk_size) ifnotchunk_data: break yieldchunk_data[0:16*1024-28] if__name__=="__main__": num=0 forchunkinread_in_chunks("E:\\1-gl300c.r3f"): #process(chunk)#name=str(num)+".bin" num=num+1 ifnum<303000: continue ifnum>308001: break file_object=open(name,'wb') file_object.write(chunk) file_object.close()
numpy.fromfile的其他方法可以参考这个
补充知识:python每隔一段时间运行一个函数
用python语言每隔两分钟从接口获取一次数据来插入到数据库
看了大佬们的方法感觉最简单就是:
做一个死循环,让函数执行完后休眠两分钟,然后进入下一次执行,除非手动停止或者有错误停止,否则程序会永远运行下去。
以下是代码:
importget_details importtime second=2*60 printsecond whileTrue: get_details.sign_cycle() time.sleep(second)
上面的代码就是让get_details模块的sign_cycle()函数每两分钟执行一次。
是不是超简单!!!!!!
以上这篇pythonnumpy实现多次循环读取文件等间隔过滤数据示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。