計算

秋刀鱼CCC發表於2024-05-01

# -*- 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)

相關文章