# -*- coding:utf-8 -*- """ @author: suyue @file: shunongdu.py @time: 2024/04/30 @desc: """ import numpy as np import pandas as pd df1 = pd.read_excel('D:/尺度速度.xls') file_path = 'D:/NM004-20230627224400-20230627224859-0.txt' # 讀整個txt檔案讀取到單個字串 with open(file_path, 'r', errors='ignore') as file: file_content = file.read() # 按時間戳拆分內容以查詢單獨的部分 # 時間戳的格式為 YYYY-MM-DD HH:MM:SS,因此我們將使用正規表示式根據此模式進行拆分 import re sections = re.split(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\n', file_content) # print(sections) # 如果txt第一個元素為空值(由於拆分),則將其刪除 if not sections[0]: sections.pop(0) # 將每個部分放入列表 list = [] # 前面txt有速度直徑介紹標識,從第二組資料開始讀 for section in sections[1:]: # 將字串拆分為幾行,然後按空格拆分每行並轉換為 DataFrame lines = section.strip().split('\n') matrix = [line.split() for line in lines] df = pd.DataFrame(matrix) # 計算數濃度公式 # 從第一組資料開始,先按列讀,從第3列開始讀取每行n值。第二次第三次...迴圈讀出每列n的個數 for col,n in df.items(): # 從第3列開始讀 n = [float(x) for x in n.values[2:]] n = np.array(n) # 第3列的n對應著“尺度速度.xls”表中第3列第一個值,所以要迴圈第3列的每一個值,來匹配第一組資料的每列 # 先讀“尺度速度.xls”第3列的所有值 d = df1['變化直徑'].values.astype(float) # list1 = [] # 將“尺度速度.xls”第3列值迴圈,當讀出第一個值時進行計算,匹配上面第一組資料的第三列的整列值 for i in d: A = float(0.0054) t = float(60) # 讀“尺度速度.xls”第二列速度值,第2行到第31行 v = df1.iloc[1:31, 1].values.astype(float) # 數濃度公式計算 # print(n) # print(A* t * v * i) ND = n/A* t * v * i ND1 = ND.sum() print(ND1) # 將迴圈的結果寫入list,好讓程式設計的結果變整齊 # list1.append(ND1) # print(list1) # 將前面小迴圈的結果寫入大迴圈,變成一組組資料 # list.append(list1) # print(list) # 顯示每個dataframe形狀以確認 # df_shapes = df.shape[n] # print(df_shapes)