怎么在python中使用numpy多次循环读取文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,Web开发等。
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的其他方法可以参考这个
补充知识:python每隔一段时间运行一个函数
用python语言每隔两分钟从接口获取一次数据来插入到数据库
看了大佬们的方法感觉最简单就是:
做一个死循环,让函数执行完后休眠两分钟,然后进入下一次执行,除非手动停止或者有错误停止,否则程序会永远运行下去。
以下是代码:
import get_details import time second=2*60 print second while True: get_details.sign_cycle() time.sleep(second)
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。