亚洲国产欧美一区二区三区f,亚洲A∨精品永久无码青草网,亚洲 暴爽 av人人爽日日碰,亚洲AV永久无码精心天堂久久_无码

系統城裝機大師 - 唯一官網:www.outletmksalestore.com!

當前位置:首頁 > 腳本中心 > 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實現多次循環讀取文件 等間隔過濾數據示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持我們。

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

亚洲国产欧美一区二区三区f,亚洲A∨精品永久无码青草网,亚洲 暴爽 av人人爽日日碰,亚洲AV永久无码精心天堂久久_无码 日本少妇又色又爽又高潮