python numpy實(shí)現(xiàn)多次循環(huán)讀取文件 等間隔過(guò)濾數(shù)據(jù)示例
numpy的np.fromfile會(huì)出現(xiàn)如下的問(wèn)題,只能一次性讀取文件的內(nèi)容,不能追加讀取,連續(xù)兩次的np.fromfile讀到的東西一樣
如果數(shù)據(jù)文件太大(幾個(gè)G或以上)不能一次性全讀進(jìn)去,需要追加讀取

而我希望讀到的donser1和donser2是連續(xù)的兩段
(實(shí)際使用時(shí),比如說(shuō)讀取的文件是二進(jìn)制數(shù)據(jù)文件,每一塊文件都包括包頭+數(shù)據(jù),希望將這兩塊分開(kāi)獲取,然后再做進(jìn)一步處理)
代碼:
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)
假設(shè)數(shù)據(jù)文件的格式是 數(shù)據(jù)+包尾,plt_arr存儲(chǔ)全部的數(shù)據(jù)部分,包尾丟棄,該方法實(shí)現(xiàn)了多次連續(xù)追加讀取數(shù)據(jù)文件的內(nèi)容plt_arr最好使用先開(kāi)好大小再逐次賦值,親測(cè)append方法和concatenate方法時(shí)間效率極差或者不用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( )
補(bǔ)充知識(shí):python每隔一段時(shí)間運(yùn)行一個(gè)函數(shù)
用python語(yǔ)言每隔兩分鐘從接口獲取一次數(shù)據(jù)來(lái)插入到數(shù)據(jù)庫(kù)
看了大佬們的方法感覺(jué)最簡(jiǎn)單就是:
做一個(gè)死循環(huán),讓函數(shù)執(zhí)行完后休眠兩分鐘,然后進(jìn)入下一次執(zhí)行,除非手動(dòng)停止或者有錯(cuò)誤停止,否則程序會(huì)永遠(yuǎn)運(yùn)行下去。
以下是代碼:
import get_details import time second=2*60 print second while True: get_details.sign_cycle() time.sleep(second)
上面的代碼就是讓get_details模塊的sign_cycle()函數(shù)每?jī)煞昼妶?zhí)行一次。
是不是超簡(jiǎn)單?。。。。?!
以上這篇python numpy實(shí)現(xiàn)多次循環(huán)讀取文件 等間隔過(guò)濾數(shù)據(jù)示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)刪除list列表重復(fù)元素的方法總結(jié)
在Python編程中,我們經(jīng)常需要處理列表中的重復(fù)元素,這篇文章為大家介紹了五種高效的方法來(lái)刪除列表中的重復(fù)元素,希望對(duì)大家有所幫助2023-07-07
Python?數(shù)據(jù)篩選功能實(shí)現(xiàn)
這篇文章主要介紹了Python?數(shù)據(jù)篩選,無(wú)論是在數(shù)據(jù)分析還是數(shù)據(jù)挖掘的時(shí)候,數(shù)據(jù)篩選總會(huì)涉及到,這里我總結(jié)了一下python中列表,字典,數(shù)據(jù)框中一些常用的數(shù)據(jù)篩選的方法,需要的朋友可以參考下2023-04-04
Python實(shí)現(xiàn)多條件篩選目標(biāo)數(shù)據(jù)功能【測(cè)試可用】
這篇文章主要介紹了Python實(shí)現(xiàn)多條件篩選目標(biāo)數(shù)據(jù)功能,結(jié)合實(shí)例形式總結(jié)分析了Python3使用內(nèi)建函數(shù)filter、pandas包以及for循環(huán)三種方法對(duì)比分析了列表進(jìn)行條件篩選操作相關(guān)實(shí)現(xiàn)技巧與運(yùn)行效率,需要的朋友可以參考下2018-06-06
OpenCV?圖像分割實(shí)現(xiàn)Kmean聚類的示例代碼
本文主要介紹了OpenCV?圖像分割實(shí)現(xiàn)Kmean聚類的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
python重寫(xiě)方法和重寫(xiě)特殊構(gòu)造方法
這篇文章主要介紹了python重寫(xiě)方法和重寫(xiě)特殊構(gòu)造方法,對(duì)于父類的方法,只要他不符合子類模擬的實(shí)物的行為,都可以進(jìn)行重寫(xiě),更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-07-07

