中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中使用numpy多次循環讀取文件

發布時間:2021-05-07 15:17:18 來源:億速云 閱讀:540 作者:Leah 欄目:開發技術

怎么在python中使用numpy多次循環讀取文件?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

python可以做什么

Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。

numpy的np.fromfile會出現如下的問題,只能一次性讀取文件的內容,不能追加讀取,連續兩次的np.fromfile讀到的東西一樣

如果數據文件太大(幾個G或以上)不能一次性全讀進去,需要追加讀取

怎么在python中使用numpy多次循環讀取文件

而我希望讀到的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)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

班戈县| 平湖市| 黑水县| 苏尼特右旗| 普安县| 兴义市| 思茅市| 桑植县| 贵溪市| 仁寿县| 大丰市| 永德县| 乐亭县| 乐山市| 巴彦淖尔市| 若尔盖县| 中宁县| 临海市| 许昌县| 吴堡县| 灵武市| 鄯善县| 巧家县| 临夏县| 普安县| 雷山县| 邵阳县| 绥棱县| 珲春市| 吴江市| 永年县| 乐至县| 西乌珠穆沁旗| 庆安县| 南木林县| 温泉县| 桓台县| 白水县| 德兴市| 比如县| 新沂市|