main.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. V = float(0.3)
  24. return [
  25. # 2*弹性模量(E)*机械比能-R1*R1-R2*R2-R3*R3+2*v*(R1*R2+R1*R3+R2*R3)
  26. 2*e*K-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  27. 2*e1*K1-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3),
  28. 2*e2*K2-R1*R1-R2*R2-R3*R3+2*V*(R1*R2+R1*R3+R2*R3)
  29. ]
  30. except:
  31. return ['null', 'null', 'null']
  32. # 对数据为null 的进行平均值填补
  33. def nullData(arr):
  34. num = 0
  35. lens = len(arr)
  36. for j in arr:
  37. if j != 'null':
  38. num += j
  39. ag = num/lens
  40. for z in range(lens):
  41. el = arr[z]
  42. if el == 'null':
  43. arr[z] = ag
  44. if __name__ == "__main__":
  45. path = 'C:\\Users\\caner\\Desktop\\test'
  46. colTitle = '机械比能'
  47. try:
  48. files = glob.glob(os.path.join(path, "*.xls"))
  49. for file in files:
  50. array = pd.read_excel(file) #读取excel数据
  51. col = array[colTitle] # 某列
  52. colLen = len(col) # 一列的长度
  53. rowLen = len(array.iloc[1]) # 一行的长度
  54. RC = [0]*(colLen) # RC初始化
  55. E = [0]*(colLen) # E初始化
  56. RK1 = [0]*(colLen) # R1初始化
  57. RK2 = [0]*(colLen) # R2初始化
  58. RK3 = [0]*(colLen) # R3初始化
  59. GRA = [0]*(colLen) # 强度初始化
  60. # 两行计算RCE
  61. for i in range(colLen):
  62. if (i+1) < len(col):
  63. K = col[i]
  64. K1 = col[i+1]
  65. res = fsolve(RCE, [100, 100000000000]) # 其它参数直接用
  66. rc = RCE(res)[0]
  67. e = RCE(res)[1]
  68. RC[i] = math.fabs(rc) # 绝对值
  69. RC[i+1] = math.fabs(rc) # 列最后一个值使用上一个的值
  70. E[i] = math.fabs(e)
  71. E[i+1] = math.fabs(e)
  72. # 单独对数据为null的进行平均值计算
  73. nullData(RC)
  74. nullData(E)
  75. # 三行计算R123
  76. for j in range(colLen):
  77. if (j+2) < len(col):
  78. K = col[j]
  79. K1 = col[j+1]
  80. K2 = col[j+2]
  81. e = E[j]
  82. e1 = E[j+1]
  83. e2 = E[j+2]
  84. rea = fsolve(R123, [1, 1, 1]) # 其它参数直接用
  85. rea = R123(rea)
  86. arr = sorted(rea, reverse=True) #倒叙
  87. RK1[j] = math.fabs(arr[0])
  88. RK1[j+1] = math.fabs(arr[0])
  89. RK1[j+2] = math.fabs(arr[0])
  90. RK2[j] = math.fabs(arr[1])
  91. RK2[j+1] = math.fabs(arr[1])
  92. RK2[j+2] = math.fabs(arr[1])
  93. RK3[j] = math.fabs(arr[2])
  94. RK3[j+1] = math.fabs(arr[2])
  95. RK3[j+2] = math.fabs(arr[2])
  96. # 单独对数据为null的进行平均值计算
  97. nullData(RK1)
  98. nullData(RK2)
  99. nullData(RK3)
  100. # 计算强度
  101. for z in range(colLen):
  102. GRA[z] = RC[z] / RK1[z]
  103. # 对整体数据进行倍数计算↓
  104. # .......
  105. # 保存excel
  106. array.insert(rowLen, '单轴抗压强度', RC)
  107. array.insert(rowLen+1, '弹性模量', E)
  108. array.insert(rowLen+2, '第一主应力', RK1)
  109. array.insert(rowLen+3, '第二主应力', RK2)
  110. array.insert(rowLen+4, '第三主应力', RK3)
  111. array.insert(rowLen+5, '岩石强度应力比', GRA)
  112. pd.DataFrame(array).to_excel(file, sheet_name='Sheet1', index=False, header=True)
  113. print('保存完毕')
  114. except:
  115. print('计算错误')