# -*- coding: utf-8 -*-"""
联系QQ:3123575367,专业SCR脱硝仿真。
Created on Wed Sep 20 20:40:30 2023
该程序用来处理fluent通过xyplot导出的数据,可计算标准偏差SD、相对标准偏差RSD,适用于求解平面的相对均匀度
@author: PS
"""import chardet #识别文件的编码格式#确定文件编码格式defcheck_code(text):#detect函数只需要一个 非unicode字符串参数,返回一个字典。该字典包括判断到的编码格式及判断的置信度。withopen(text,'rb')as f:
adchar = chardet.detect(f.read())# adchar = chardet.detect(text)# 由于windows系统的编码有可能是Windows-1254,打印出来后还是乱码,所以不直接用adchar['encoding']编码if adchar['encoding']=='gbk'or adchar['encoding']=='GBK'or adchar['encoding']=='GB2312':return'GB2312'else:return'utf-8'#读取文件并进行计算 defread_file_text(file_url):withopen(file_url,'r',encoding=check_code(file_url))as f0:
row_nul =4for i inrange(row_nul):next(f0)#跳行
f0_word = f0.readlines()
ls =[]
x=[]
y=[]#将文本数据按照行整理到列表中for line in f0_word:
line = line.strip('\n')#将每段的回车替换为空格
line = line.replace(')','')
words = line.split()#将字符串以空格分开
ls.append(words)#将列表中的数据按照列提取出来for lin in ls:for l inrange(len(lin)):
lin[l]= lin[l].strip('(')#去掉左右的((while''in lin:#将空格字符串删除
lin.remove('')#最后一列为空值,需要跳过if lin == ls[-1]:break
x.append(float(lin[0]))#保存文本的第一列数据
y.append(float(lin[1]))#保存文本的第二列数据#计算#计算含0的数据
mean =sum(y)/len(y)
qh =[]for num in y:
qh.append(pow(num-mean,2))
qv =pow(sum(qh)/(len(qh)-1),0.5)
cv = qv/mean
print('+++++++未操作数据 +++++++')print(f'标准偏差(SD)为:{round(qv*100,4)} %\n相对标准偏差(RSD)为:{round(cv*100,4)} %')#计算去除0后的数据
y_no_zero =[i for i in y if i!=0]#去除0元素
mean_no_zero =sum(y_no_zero)/len(y_no_zero)
qh_no_zero =[pow(num-mean_no_zero,2)for num in y_no_zero]
qv_no_zero =pow(sum(qh_no_zero)/(len(qh_no_zero)-1),0.5)
cv_no_zero = qv_no_zero/mean_no_zero
print('------------去除 0 数据------------')print(f'标准偏差(SD)为:{round(qv_no_zero*100,4)} %\n相对标准偏差(RSD)为:{round(cv_no_zero*100,4)} %')
read_file_text(r'F:\20230919-scr\3d\ve-m4.xy')