main.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import pandas as pd
  2. from scipy.optimize import fsolve
  3. import glob
  4. import os
  5. import math
  6. # RCE方程函数
  7. def RCE(rce):
  8. try:
  9. RC = float(rce[0])
  10. E = float(rce[1])
  11. return [
  12. 2*K*E-RC*RC,
  13. 2*K1*E-RC*RC
  14. ]
  15. except:
  16. return ['null', 'null']
  17. # R123方程函数
  18. def R123(r):
  19. try:
  20. R1 = float(r[0])
  21. R2 = float(r[1])
  22. R3 = float(r[2])
  23. Er = float(r[3])
  24. V = float(r[4])
  25. return [
  26. # 2*弹性模量(E)*机械比能-R1*R1-R2*R2-R3*R3+2*v*(R1*R2+R1*R3+R2*R3)
  27. 2*Er*K-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  28. 2*Er*K1-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  29. 2*Er*K2-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  30. 2*Er*K3-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  31. 2*Er*K4-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3)
  32. ]
  33. except:
  34. return ['null', 'null', 'null', 'null', 'null']
  35. # 对数据为null 的进行平均值填补
  36. def nullData(arr):
  37. num = 0
  38. lens = len(arr)
  39. for j in arr:
  40. if j != 'null':
  41. num += j
  42. ag = num/lens
  43. for z in range(lens):
  44. el = arr[z]
  45. if el == 'null' or el == 0:
  46. arr[z] = ag
  47. if __name__ == "__main__":
  48. path = 'C:\\Users\\caner\\Desktop\\countExcel'
  49. colTitle = '机械比能'
  50. try:
  51. files = glob.glob(os.path.join(path, "*.xls"))
  52. for file in files:
  53. array = pd.read_excel(file) # 读取excel数据
  54. try:
  55. # 删除一次old
  56. array.drop('单轴抗压强度', axis=1, inplace=True)
  57. array.drop('弹性模量', axis=1, inplace=True)
  58. array.drop('第一主应力', axis=1, inplace=True)
  59. array.drop('第二主应力', axis=1, inplace=True)
  60. array.drop('第三主应力', axis=1, inplace=True)
  61. array.drop('岩石强度应力比', axis=1, inplace=True)
  62. except:
  63. print('无旧数据')
  64. # 获取数据
  65. col = array[colTitle] # 某列
  66. colLen = len(col) # 一列的长度
  67. rowLen = len(array.iloc[1]) # 一行的长度
  68. RC = [0]*(colLen) # RC初始化
  69. E = [0]*(colLen) # E初始化
  70. RK1 = [0]*(colLen) # R1初始化
  71. RK2 = [0]*(colLen) # R2初始化
  72. RK3 = [0]*(colLen) # R3初始化
  73. GRA = [0]*(colLen) # 强度初始化
  74. # 两行计算RCE
  75. for i in range(colLen):
  76. if (i+1) < len(col):
  77. K = col[i]
  78. K1 = col[i+1]
  79. res = fsolve(RCE, [1, 1000]) # 其它参数直接用
  80. rc = RCE(res)[0]
  81. e = RCE(res)[1]
  82. RC[i] = math.fabs(rc) # 绝对值
  83. RC[i+1] = math.fabs(rc) # 列最后一个值使用上一个的值
  84. E[i] = math.fabs(e)
  85. E[i+1] = math.fabs(e)
  86. # 单独对数据为null的进行平均值计算
  87. nullData(RC)
  88. nullData(E)
  89. # 三行计算R123
  90. for j in range(colLen):
  91. if (j+4) < len(col):
  92. K = col[j]
  93. K1 = col[j+1]
  94. K2 = col[j+2]
  95. K3 = col[j+3]
  96. K4 = col[j+4]
  97. rea = fsolve(R123, [1, 1, 1, 100, 1]) # 其它参数直接用
  98. rea = R123(rea)
  99. arr = sorted(rea, reverse=True) # 倒叙
  100. print(arr)
  101. RK1[j] = math.fabs(arr[0])
  102. RK1[j+1] = math.fabs(arr[0])
  103. RK1[j+2] = math.fabs(arr[0])
  104. RK1[j+3] = math.fabs(arr[0])
  105. RK1[j+4] = math.fabs(arr[0])
  106. RK2[j] = math.fabs(arr[1])
  107. RK2[j+1] = math.fabs(arr[1])
  108. RK2[j+2] = math.fabs(arr[1])
  109. RK2[j+3] = math.fabs(arr[1])
  110. RK2[j+4] = math.fabs(arr[1])
  111. RK3[j] = math.fabs(arr[2])
  112. RK3[j+1] = math.fabs(arr[2])
  113. RK3[j+2] = math.fabs(arr[2])
  114. RK3[j+3] = math.fabs(arr[2])
  115. RK3[j+4] = math.fabs(arr[2])
  116. # 单独对数据为null的进行平均值计算
  117. nullData(RK1)
  118. nullData(RK2)
  119. nullData(RK3)
  120. # 对整体数据进行倍数计算↓
  121. for G in range(colLen):
  122. RC[G] = RC[G]/100
  123. E[G] = E[G]
  124. RK1[G] = RK1[G]/100
  125. RK2[G] = RK2[G]/100
  126. RK3[G] = RK3[G]/100
  127. # 计算强度
  128. for z in range(colLen):
  129. try:
  130. GRA[z] = RC[z] / RK1[z]
  131. except:
  132. GRA[z] = 'null'
  133. # 单独对数据为null的进行平均值计算
  134. nullData(GRA)
  135. # 保存excel
  136. array.insert(rowLen, '单轴抗压强度', RC)
  137. array.insert(rowLen+1, '弹性模量', E)
  138. array.insert(rowLen+2, '第一主应力', RK1)
  139. array.insert(rowLen+3, '第二主应力', RK2)
  140. array.insert(rowLen+4, '第三主应力', RK3)
  141. array.insert(rowLen+5, '岩石强度应力比', GRA)
  142. pd.DataFrame(array).to_excel(
  143. file, sheet_name='Sheet1', index=False, header=True)
  144. print('保存完毕')
  145. except ZeroDivisionError as err:
  146. print('计算错误', err)