Browse Source

增加封装类
Signed-off-by: caner <5658514@qq.com>

caner 3 years ago
parent
commit
ad4f4fb6be
4 changed files with 279 additions and 152 deletions
  1. BIN
      3744.xls
  2. BIN
      3745.xls
  3. BIN
      3766.xls
  4. 279 152
      main.py

BIN
3744.xls


BIN
3745.xls


BIN
3766.xls


+ 279 - 152
main.py

@@ -4,158 +4,285 @@ import glob
 import os
 import math
 
-# RCE方程函数
-def RCE(rce):
-    try:
-        RC = float(rce[0])
-        E = float(rce[1])
-        return [
-            2*K*E-RC*RC,
-            2*K1*E-RC*RC
-        ]
-    except:
-        return ['null', 'null']
-
-# R123方程函数
-def R123(r):
-    try:
-        R1 = float(r[0])
-        R2 = float(r[1])
-        R3 = float(r[2])
-        Er = float(r[3])
-        V = float(r[4])
-        return [
-            # 2*弹性模量(E)*机械比能-R1*R1-R2*R2-R3*R3+2*v*(R1*R2+R1*R3+R2*R3)
-            2*Er*K-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
-            2*Er*K1-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
-            2*Er*K2-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
-            2*Er*K3-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
-            2*Er*K4-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3)
-        ]
-    except:
-        return ['null', 'null', 'null', 'null', 'null']
-
-# 对数据为null 的进行平均值填补
-def nullData(arr):
-    num = 0
-    lens = len(arr)
-    for j in arr:
-        if j != 'null':
-            num += j
-    ag = num/lens
-    for z in range(lens):
-        el = arr[z]
-        if el == 'null' or el == 0:
-            arr[z] = ag
-
-
-if __name__ == "__main__":
-    path = 'C:\\Users\\caner\\Desktop\\countExcel'
-    colTitle = '机械比能'
-    try:
-        files = glob.glob(os.path.join(path, "*.xls"))
-        for file in files:
-            array = pd.read_excel(file)  # 读取excel数据
-            try:
-                # 删除一次old
-                array.drop('单轴抗压强度', axis=1, inplace=True)
-                array.drop('弹性模量', axis=1, inplace=True)
-                array.drop('第一主应力', axis=1, inplace=True)
-                array.drop('第二主应力', axis=1, inplace=True)
-                array.drop('第三主应力', axis=1, inplace=True)
-                array.drop('岩石强度应力比', axis=1, inplace=True)
-            except:
-                print('无旧数据')
-                
-            # 获取数据
-            col = array[colTitle]  # 某列
-            colLen = len(col)  # 一列的长度
-            rowLen = len(array.iloc[1])  # 一行的长度
-            RC = [0]*(colLen)  # RC初始化
-            E = [0]*(colLen)  # E初始化
-            RK1 = [0]*(colLen)  # R1初始化
-            RK2 = [0]*(colLen)  # R2初始化
-            RK3 = [0]*(colLen)  # R3初始化
-            GRA = [0]*(colLen)  # 强度初始化
-
-            # 两行计算RCE
-            for i in range(colLen):
-                if (i+1) < len(col):
-                    K = col[i]
-                    K1 = col[i+1]
-                    res = fsolve(RCE, [1, 1000])  # 其它参数直接用
-                    rc = RCE(res)[0]
-                    e = RCE(res)[1]
-                    RC[i] = math.fabs(rc)  # 绝对值
-                    RC[i+1] = math.fabs(rc)  # 列最后一个值使用上一个的值
-                    E[i] = math.fabs(e)
-                    E[i+1] = math.fabs(e)
+class countExcel:
+    # init 
+    def __init__(self,FilePath='C:\\Users\\caner\\Desktop\\countExcelC:\\Users\\caner\\Desktop\\countExcel') -> None:
+        print('初始化传参',FilePath)
+        pass
+    # RCE方程函数
+    def RCE(self,rce,v):
+        try:
+            RC = float(rce[0])
+            E = float(rce[1])
+            K = float(v[0])
+            K1 = float(v[1])
+            return [
+                2*K*E-RC*RC,
+                2*K1*E-RC*RC
+            ]
+        except:
+            return ['null', 'null']
 
-                # 单独对数据为null的进行平均值计算
-            nullData(RC)
-            nullData(E)
-
-            # 三行计算R123
-            for j in range(colLen):
-                if (j+4) < len(col):
-                    K = col[j]
-                    K1 = col[j+1]
-                    K2 = col[j+2]
-                    K3 = col[j+3]
-                    K4 = col[j+4]
-                    rea = fsolve(R123, [1, 1, 1, 100, 1])  # 其它参数直接用
-                    rea = R123(rea)
-                    arr = sorted(rea, reverse=True)  # 倒叙
-                    print(arr)
-                    RK1[j] = math.fabs(arr[0])
-                    RK1[j+1] = math.fabs(arr[0])
-                    RK1[j+2] = math.fabs(arr[0])
-                    RK1[j+3] = math.fabs(arr[0])
-                    RK1[j+4] = math.fabs(arr[0])
-                    RK2[j] = math.fabs(arr[1])
-                    RK2[j+1] = math.fabs(arr[1])
-                    RK2[j+2] = math.fabs(arr[1])
-                    RK2[j+3] = math.fabs(arr[1])
-                    RK2[j+4] = math.fabs(arr[1])
-                    RK3[j] = math.fabs(arr[2])
-                    RK3[j+1] = math.fabs(arr[2])
-                    RK3[j+2] = math.fabs(arr[2])
-                    RK3[j+3] = math.fabs(arr[2])
-                    RK3[j+4] = math.fabs(arr[2])
-
-            # 单独对数据为null的进行平均值计算
-            nullData(RK1)
-            nullData(RK2)
-            nullData(RK3)
-
-            # 对整体数据进行倍数计算↓
-            for G in range(colLen):
-                RC[G] = RC[G]/100
-                E[G] = E[G]
-                RK1[G] = RK1[G]/100
-                RK2[G] = RK2[G]/100
-                RK3[G] = RK3[G]/100
-
-            # 计算强度
-            for z in range(colLen):
+    # R123方程函数
+    def R123(self,r,v):
+        try:
+            R1 = float(r[0])
+            R2 = float(r[1])
+            R3 = float(r[2])
+            Er = float(r[3])
+            V = float(r[4])
+            K = float(v[0])
+            K1 = float(v[1])
+            K2 = float(v[2])
+            K3 = float(v[3])          
+            K4 = float(v[4])               
+            return [
+                # 2*弹性模量(E)*机械比能-R1*R1-R2*R2-R3*R3+2*v*(R1*R2+R1*R3+R2*R3)
+                2*Er*K-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
+                2*Er*K1-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
+                2*Er*K2-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
+                2*Er*K3-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
+                2*Er*K4-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3)
+            ]
+        except:
+            return ['null', 'null', 'null', 'null', 'null']
+
+    # 对数据为null 的进行平均值填补
+    def nullData(self,arr):
+        num = 0
+        lens = len(arr)
+        for j in arr:
+            if j != 'null':
+                num += j
+        ag = num/lens
+        for z in range(lens):
+            el = arr[z]
+            if el == 'null' or el == 0:
+                arr[z] = ag
+
+    def main(self):
+        colTitle = '机械比能'
+        try:
+            files = glob.glob(os.path.join(self.FilePath, "*.xls"))
+            RC,E ,RK1,RK2,RK3,GRA #注意返回的变量是当前域全局变量
+            for file in files:
+                array = pd.read_excel(file)  # 读取excel数据
                 try:
-                    GRA[z] = RC[z] / RK1[z]
+                    # 删除一次old
+                    array.drop('单轴抗压强度', axis=1, inplace=True)
+                    array.drop('弹性模量', axis=1, inplace=True)
+                    array.drop('第一主应力', axis=1, inplace=True)
+                    array.drop('第二主应力', axis=1, inplace=True)
+                    array.drop('第三主应力', axis=1, inplace=True)
+                    array.drop('岩石强度应力比', axis=1, inplace=True)
                 except:
-                    GRA[z] = 'null'
-
-            # 单独对数据为null的进行平均值计算
-            nullData(GRA)
-
-            # 保存excel
-            array.insert(rowLen, '单轴抗压强度', RC)
-            array.insert(rowLen+1, '弹性模量', E)
-            array.insert(rowLen+2, '第一主应力', RK1)
-            array.insert(rowLen+3, '第二主应力', RK2)
-            array.insert(rowLen+4, '第三主应力', RK3)
-            array.insert(rowLen+5, '岩石强度应力比', GRA)
-            pd.DataFrame(array).to_excel(
-                file, sheet_name='Sheet1', index=False, header=True)
-            print('保存完毕')
-
-    except ZeroDivisionError as err:
-        print('计算错误', err)
+                    print('无旧数据')
+
+                # 获取数据
+                col = array[colTitle]  # 某列
+                colLen = len(col)  # 一列的长度
+                rowLen = len(array.iloc[1])  # 一行的长度
+                RC = [0]*(colLen)  # RC初始化
+                E = [0]*(colLen)  # E初始化
+                RK1 = [0]*(colLen)  # R1初始化
+                RK2 = [0]*(colLen)  # R2初始化
+                RK3 = [0]*(colLen)  # R3初始化
+                GRA = [0]*(colLen)  # 强度初始化
+
+                # 两行计算RCE
+                for i in range(colLen):
+                    if (i+1) < len(col):
+                        K = col[i]
+                        K1 = col[i+1]
+                        res = fsolve(self.RCE, [1, 1000],[K,K1])  # 其它参数直接用
+                        rc = self.RCE(res)[0]
+                        e = self.RCE(res)[1]
+                        RC[i] = math.fabs(rc)  # 绝对值
+                        RC[i+1] = math.fabs(rc)  # 列最后一个值使用上一个的值
+                        E[i] = math.fabs(e)
+                        E[i+1] = math.fabs(e)
+
+                    # 单独对数据为null的进行平均值计算
+                self.nullData(RC)
+                self.nullData(E)
+
+                # 三行计算R123
+                for j in range(colLen):
+                    if (j+4) < len(col):
+                        K = col[j]
+                        K1 = col[j+1]
+                        K2 = col[j+2]
+                        K3 = col[j+3]
+                        K4 = col[j+4]
+                        rea = fsolve(self.R123, [1, 1, 1, 100, 1],[K,K1,K2,K3,K4])  # 其它参数直接用
+                        rea = self.R123(rea)
+                        arr = sorted(rea, reverse=True)  # 倒叙
+                        print(arr)
+                        RK1[j] = math.fabs(arr[0])
+                        RK1[j+1] = math.fabs(arr[0])
+                        RK1[j+2] = math.fabs(arr[0])
+                        RK1[j+3] = math.fabs(arr[0])
+                        RK1[j+4] = math.fabs(arr[0])
+                        RK2[j] = math.fabs(arr[1])
+                        RK2[j+1] = math.fabs(arr[1])
+                        RK2[j+2] = math.fabs(arr[1])
+                        RK2[j+3] = math.fabs(arr[1])
+                        RK2[j+4] = math.fabs(arr[1])
+                        RK3[j] = math.fabs(arr[2])
+                        RK3[j+1] = math.fabs(arr[2])
+                        RK3[j+2] = math.fabs(arr[2])
+                        RK3[j+3] = math.fabs(arr[2])
+                        RK3[j+4] = math.fabs(arr[2])
+
+                # 单独对数据为null的进行平均值计算
+                self.nullData(RK1)
+                self.nullData(RK2)
+                self.nullData(RK3)
+
+                # 对整体数据进行倍数计算↓
+                for G in range(colLen):
+                    RC[G] = RC[G]/100
+                    E[G] = E[G]
+                    RK1[G] = RK1[G]/100
+                    RK2[G] = RK2[G]/100
+                    RK3[G] = RK3[G]/100
+
+                # 计算强度
+                for z in range(colLen):
+                    try:
+                        GRA[z] = RC[z] / RK1[z]
+                    except:
+                        GRA[z] = 'null'
+
+                # 单独对数据为null的进行平均值计算
+                self.nullData(GRA)
+
+                # # 保存excel
+                # array.insert(rowLen, '单轴抗压强度', RC)
+                # array.insert(rowLen+1, '弹性模量', E)
+                # array.insert(rowLen+2, '第一主应力', RK1)
+                # array.insert(rowLen+3, '第二主应力', RK2)
+                # array.insert(rowLen+4, '第三主应力', RK3)
+                # array.insert(rowLen+5, '岩石强度应力比', GRA)
+                # pd.DataFrame(array).to_excel(
+                #     file, sheet_name='Sheet1', index=False, header=True)
+                # print('保存完毕')
+            return {RC,E ,RK1,RK2,RK3,GRA}
+        except ZeroDivisionError as err:
+            print('计算错误', err)    
+# 调用
+# from countExcel import countExcel
+# a = countExcel()
+# b = a.main()
+
+
+# if __name__ == "__main__":
+#     path = 'C:\\Users\\caner\\Desktop\\countExcel'
+#     colTitle = '机械比能'
+#     try:
+#         files = glob.glob(os.path.join(path, "*.xls"))
+#         for file in files:
+#             array = pd.read_excel(file)  # 读取excel数据
+#             try:
+#                 # 删除一次old
+#                 array.drop('单轴抗压强度', axis=1, inplace=True)
+#                 array.drop('弹性模量', axis=1, inplace=True)
+#                 array.drop('第一主应力', axis=1, inplace=True)
+#                 array.drop('第二主应力', axis=1, inplace=True)
+#                 array.drop('第三主应力', axis=1, inplace=True)
+#                 array.drop('岩石强度应力比', axis=1, inplace=True)
+#             except:
+#                 print('无旧数据')
+
+#             # 获取数据
+#             col = array[colTitle]  # 某列
+#             colLen = len(col)  # 一列的长度
+#             rowLen = len(array.iloc[1])  # 一行的长度
+#             RC = [0]*(colLen)  # RC初始化
+#             E = [0]*(colLen)  # E初始化
+#             RK1 = [0]*(colLen)  # R1初始化
+#             RK2 = [0]*(colLen)  # R2初始化
+#             RK3 = [0]*(colLen)  # R3初始化
+#             GRA = [0]*(colLen)  # 强度初始化
+
+#             # 两行计算RCE
+#             for i in range(colLen):
+#                 if (i+1) < len(col):
+#                     K = col[i]
+#                     K1 = col[i+1]
+#                     res = fsolve(RCE, [1, 1000])  # 其它参数直接用
+#                     rc = RCE(res)[0]
+#                     e = RCE(res)[1]
+#                     RC[i] = math.fabs(rc)  # 绝对值
+#                     RC[i+1] = math.fabs(rc)  # 列最后一个值使用上一个的值
+#                     E[i] = math.fabs(e)
+#                     E[i+1] = math.fabs(e)
+
+#                 # 单独对数据为null的进行平均值计算
+#             nullData(RC)
+#             nullData(E)
+
+#             # 三行计算R123
+#             for j in range(colLen):
+#                 if (j+4) < len(col):
+#                     K = col[j]
+#                     K1 = col[j+1]
+#                     K2 = col[j+2]
+#                     K3 = col[j+3]
+#                     K4 = col[j+4]
+#                     rea = fsolve(R123, [1, 1, 1, 100, 1])  # 其它参数直接用
+#                     rea = R123(rea)
+#                     arr = sorted(rea, reverse=True)  # 倒叙
+#                     print(arr)
+#                     RK1[j] = math.fabs(arr[0])
+#                     RK1[j+1] = math.fabs(arr[0])
+#                     RK1[j+2] = math.fabs(arr[0])
+#                     RK1[j+3] = math.fabs(arr[0])
+#                     RK1[j+4] = math.fabs(arr[0])
+#                     RK2[j] = math.fabs(arr[1])
+#                     RK2[j+1] = math.fabs(arr[1])
+#                     RK2[j+2] = math.fabs(arr[1])
+#                     RK2[j+3] = math.fabs(arr[1])
+#                     RK2[j+4] = math.fabs(arr[1])
+#                     RK3[j] = math.fabs(arr[2])
+#                     RK3[j+1] = math.fabs(arr[2])
+#                     RK3[j+2] = math.fabs(arr[2])
+#                     RK3[j+3] = math.fabs(arr[2])
+#                     RK3[j+4] = math.fabs(arr[2])
+
+#             # 单独对数据为null的进行平均值计算
+#             nullData(RK1)
+#             nullData(RK2)
+#             nullData(RK3)
+
+#             # 对整体数据进行倍数计算↓
+#             for G in range(colLen):
+#                 RC[G] = RC[G]/100
+#                 E[G] = E[G]
+#                 RK1[G] = RK1[G]/100
+#                 RK2[G] = RK2[G]/100
+#                 RK3[G] = RK3[G]/100
+
+#             # 计算强度
+#             for z in range(colLen):
+#                 try:
+#                     GRA[z] = RC[z] / RK1[z]
+#                 except:
+#                     GRA[z] = 'null'
+
+#             # 单独对数据为null的进行平均值计算
+#             nullData(GRA)
+
+#             # 保存excel
+#             array.insert(rowLen, '单轴抗压强度', RC)
+#             array.insert(rowLen+1, '弹性模量', E)
+#             array.insert(rowLen+2, '第一主应力', RK1)
+#             array.insert(rowLen+3, '第二主应力', RK2)
+#             array.insert(rowLen+4, '第三主应力', RK3)
+#             array.insert(rowLen+5, '岩石强度应力比', GRA)
+#             pd.DataFrame(array).to_excel(
+#                 file, sheet_name='Sheet1', index=False, header=True)
+#             print('保存完毕')
+
+#     except ZeroDivisionError as err:
+#         print('计算错误', err)