python对文本操作,生成可执行文件

.exe文件主要包含pingmianF.py文件和read_inp_auto.py文件

 

 

实现效果

 

 

代码

read_inp_auto.py

#-*- coding: utf-8 -*-
import re
import sys
import os
import os.path
import time
import pingmianF
from pingmianF import vector
import numpy as np
from tkinter import messagebox
from tkinter import filedialog

ls_weldline = []
ls_welddomain = []
ls1 = []
ls2 = []
def popupmsg(msg):
    messagebox.showerror('Warning', msg)




#生成资源文件目录访问路径
def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)
def automation(path_inpname):
    #访问res文件夹下数据.txt的内容
    filename = resource_path(os.path.join("file",path_inpname))

    with open(filename,'r',encoding='utf-8') as fa:
        for line in fa:

            if "WELDLINE_" in line:
                ls1.append(line)
            if "WELDDOMAIN_" in line:
                ls2.append(line)
        print(ls1)
        print(ls2)
        # lines = fa.readlines()
        # print(lines)
        # f.close()
    # fa.close()



    # # with open ('project_incoordinata.txt','r',encoding = 'utf8') as f:
    # fa = open(r"project_1.inp", 'r',encoding="utf-8")
    # fb = open("weldline_out.txt",'w')
    # fc = open("welddomain_out.txt",'w')
    # # fd = open("all_node_coordinate_out.txt",'w')


    # for line in fa:
    #
    #     if "WELDLINE_" in line:
    #         ls1.append(line)
    #     if "WELDDOMAIN_"in line:
    #         ls2.append(line)
    # print(ls1)
    # print(ls2)
    # ['*NSET, NSET=Closed_2_weldline_126578_143528\n', '*NSET, NSET=Closed_2_weldline_126051_144027\n', '*NSET, NSET=Open_3_weldline_126776_189374\n']
    # ['*ELSET, ELSET=Closed_2_welddomain_318468\n', '*ELSET, ELSET=Closed_2_welddomain_318666\n', '*ELSET, ELSET=Open_3_welddomain_628339\n']


    for i in range(0,len(ls1)):
        ls_weldline.append(ls1[i].strip('\n').split('=')[-1])
    #print(ls_weldline)
    for j in range(0,len(ls2)):
        # print(ls_welddomain[j])
        ls_welddomain.append(ls2[j].strip('\n').split('=')[-1])
    print(ls_welddomain)
    print(len(ls_welddomain))
    # ['Closed_2_weldline_126578_143528', 'Closed_2_weldline_126051_144027', 'Open_3_weldline_126776_189374']
    # ['Closed_2_welddomain_318468', 'Closed_2_welddomain_318666', 'Open_3_welddomain_628339']

    # fb.write(str(ls_weldline))
    # fc.write(str(ls_welddomain))

    # 从inp里面提取出需要的字符串存入,ls_weldline,ls_welddomain

    welddomain_element = []
    ls_element = []
    for k in range(0,len(ls_welddomain)):
        welddomain_element.append(ls_welddomain[k].strip('\n').split('_')[-1])
    print("welddomain_element is"+str(welddomain_element))
    print(len(welddomain_element))

    # ['318468', '318666', '628339']
    # 提取每个热影响区的起始单元

    welddomain_ele_node = []
    filename = resource_path(os.path.join("file",path_inpname))
    print(filename)
    with open(filename,'r',encoding='utf-8') as f:
    # with open('project_1.inp', 'r') as f:

           for line in f:
               for j in range(0, len(welddomain_element)):
                   if welddomain_element[j] in line:
                       welddomain_ele_node.append(line)
    print(welddomain_ele_node )
    print(len(welddomain_ele_node) )

    # f.close()

    # print(welddomain_ele_node)
    # print(len(welddomain_ele_node))

    welddomain_ele = []
    welddomain_node = []

    welddomain_ele = welddomain_ele_node [0:len(welddomain_element)]
    print(welddomain_ele)
    print(len(welddomain_ele))

    # ['    628339,    126776,    189374,    189375,    189198,    189434,    189435,    189433,\n', '    318666,    144028,    127140,    126051,    144027,    144603,    144602,    144604,\n', '    318468,    143529,    143528,    126578,    126990,    144519,    144521,    144520,\n']
    #提取单元所在行包含的八个节点

    for j in range(0, len(welddomain_ele)):
        welddomain_ele[j] = welddomain_ele[j].strip( ).strip('\n').split(',')[1:4]
    # print(welddomain_ele)spec
    print(len(welddomain_ele))

    # [['    126776', '    189374', '    189375'], ['    144028', '    127140', '    126051'], ['    143529', '    143528', '    126578']]
    # 提取单元所包含节点里面的前三个节点,用来求取法向量
    # print(welddomain_ele[0][0])

    #获取节点坐标文档
    import re
    filename = resource_path(os.path.join("file",path_inpname))
    print(filename)
    node_coordinate = []
    with open(filename,'r',encoding='utf-8') as fa:
    # node_coordinate = []
    # with open('project_1.inp', 'r') as f:
        data = fa.read().splitlines()
    idx1 = data.index('*NODE,NSET=NALL')
    idx2 = data.index('**')
    output = data[idx1 + 1 : idx2]
    # fa.close()

    filename = resource_path(os.path.join("file","project_incoordinata.txt"))
    print(filename)
    node_coordinate = []
    # with open(filename,'r',encoding='utf-8') as fa:

    with open (filename,'w',encoding = 'utf8') as f:
        f.write('\n'.join(output))
    project_incoordinata = []

    # f.close()
    with open (filename,'r',encoding = 'utf8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip('\n').split(',')
            project_incoordinata.append(line)
        print(len(project_incoordinata))
        print(project_incoordinata)

    # f.close()
    #['    126776', '    189374', '    189375', '    144028', '    127140', '    126051', '    143529', '    143528', '    126578']

    node = []
    print(len(welddomain_ele))
    for j in range (0,len(welddomain_ele)):
        for k in range(0,3):
            node.append(welddomain_ele[j][k])
    print(node)
    #['    126776', '    189374', '    189375', '    144028', '    127140', '    126051', '    143529', '    143528', '    126578']
    with open (filename,'r',encoding = 'utf8') as f:

        for line in f.readlines():
            str1 = line.split(',')[0]
            int_str1 = int(str1)
            for j in range(0,len(node)):
                if int_str1 == int(node[j]):
                    node_coordinate.append(line)
    # f.close()
    # print(node_coordinate)


    #node_coordinate
    #['126051,        -213.32157,      -23.94757,       55.92702\n',
    # '126578,         -49.68242,      -23.94821,      -50.66072\n',
    # '126776,        -114.42335,      -23.94608,      -46.53174\n',
    # '127140,        -212.51184,      -23.98995,       56.26252\n',
    # '143528,         -48.68259,      -23.94195,      -50.67784\n',
    # '143529,         -48.67345,      -23.97157,      -50.15527\n',
    # '144028,        -212.89419,      -23.97285,       57.18638\n',
    # '189374,        -115.39657,      -23.94313,      -46.30191\n',
    # '189375,        -115.09989,      -23.98079,      -45.04446\n']
    node_list = []
    print(len(node))
    print(len(node_coordinate))
    for i in range (0,len(node)):
        for j in range (0,len(node_coordinate)):
            str1 = node_coordinate[j].strip(' ').split(',')[0]
            str2 = node[i].strip(' ')
            # print(str1)
            # print(str2)
            str3 = node_coordinate[j].strip(' ').strip('\n').split(',')[1:4]
            if int(str1) == int(str2):
                node_list.append(str3)
    print(node_list)
    # print(node_list[0])
    # node_list = np.array(node_list)
    # print(node_list)
    # for i in range(0,len(node_list)):
    #     node_list[i] = node_list[i].astype(np.float64)
    #
    # print(node_list)
    #
    #['126776,        -114.42335,      -23.94608,      -46.53174\n',
    # '189374,        -115.39657,      -23.94313,      -46.30191\n',
    # '189375,        -115.09989,      -23.98079,      -45.04446\n',
    # '144028,        -212.89419,      -23.97285,       57.18638\n',
    # '127140,        -212.51184,      -23.98995,       56.26252\n',
    # '126051,        -213.32157,      -23.94757,       55.92702\n',
    # '143529,         -48.67345,      -23.97157,      -50.15527\n',
    # '143528,         -48.68259,      -23.94195,      -50.67784\n',
    # '126578,         -49.68242,      -23.94821,      -50.66072\n']

    # [['        -114.42335', '      -23.94608', '      -46.53174'],
    # ['        -115.39657', '      -23.94313', '      -46.30191'],
    # ['        -115.09989', '      -23.98079', '      -45.04446'],
    # ['        -212.89419', '      -23.97285', '       57.18638'],
    # ['        -212.51184', '      -23.98995', '       56.26252'],
    # ['        -213.32157', '      -23.94757', '       55.92702'],
    # ['         -48.67345', '      -23.97157', '      -50.15527'],
    # ['         -48.68259', '      -23.94195', '      -50.67784'],
    # ['         -49.68242', '      -23.94821', '      -50.66072']]



    # fa.close()
    #
    # f.close()

    # f1 = open('weld-current - 副本1.txt', 'r')
    # f1 = open('weld-current - 副本1.txt', 'w')
    # f2 = open('weld-current_modify.wdf', 'a')
    filename1 = resource_path(os.path.join("file","weld-current_modify.wdf"))
    os.remove(filename1)

    filename2 = resource_path(os.path.join("file","weld_current.txt"))

    f1 = open(filename1,'a',encoding='utf-8')


    f1.write('<weld_definition>\n')
        # f1.close()
    # f2 = open('weld-current_modify.wdf', 'a')
    #import os
    #try:
    #except

    # f2.write('<weld_definition>\n')
    # for line in f1:
    # def Macro1(test_wdomain,test_wline):
    j = 0
    with open(filename2,'r',encoding='utf-8') as f2:

        # content = f1.read()
        # f1.seek(0,0)
        # f1.write('<weld_definition>\n'+content)
        for i in range(0,len(ls_welddomain)):



            lines = f2.read()
            f2.seek(0)

            # if '%welddomain' in line:

                # f1.write(line.replace('%welddomain','welddomain1234_4567'))
            #
            # lines = lines.replace('%Line_Weld','weld_line[i]')
            # print('weld_line[i]')

            lines = lines.replace('%New_Line',ls_weldline[i].upper())

            lines = lines.replace('%plate_thickness', ls_weldline[i].strip('\n').split('_')[1])

            lines = lines.replace('%welddomain',"PART-1-1_"+ ls_welddomain[i].upper())
            lines = lines.replace('%start_element', ls_welddomain[i].strip('\n').split('_')[-1])

            lines = lines.replace('%reference_normal',str(pingmianF.vector(node_list[j],node_list[j+1],node_list[j+2])))
            print(vector(node_list[j], node_list[j + 1], node_list[j + 2]))

            # if '%weldline' in line:

                # f1.write(line.replace('%weldline', 'weldline1234_4567'))
            lines = lines.replace('%weldline', "PART-1-1_"+ ls_weldline[i].upper()+"_nodal")
            lines = lines.replace('%start_node', ls_weldline[i].strip('\n').split('_')[-1])

            lines = lines.replace('%weld_type', ls_welddomain[i].strip('\n').split('_')[0].capitalize())

            f1.write(lines)


            j = j+3

        f1.write('</weld_definition>')
    f1.close()
    f2.close()
    fa.close()
    f.close()
if __name__ == '__main__':
    path_inpname = filedialog.askopenfilenames(title="Select Text File",
                                       filetypes=[("INP File", "*.inp"), ("All Files", "*.*")])
    # print(path_inpname)
    automation(path_inpname[0])
    # try:
    #     automation(path_inpname[0])
    # except:
    #     popupmsg('工具运行不成功!')
# f2.close()

pingmianF.py

# import numpy as np
#
# def compute_normal_vector(point1, point2, point3):
#     vector1 = np.array(point2) - np.array(point1)
#     vector2 = np.array(point3) - np.array(point1)
#     normal_vector = np.cross(vector1, vector2)
#     return normal_vector
#
# # 示例输入
# point1 = [-114.42335,      -23.94608,      -46.53174]
# point2 = [-115.39657,      -23.94313,      -46.30191]
# point3 = [-115.09989,      -23.98079,      -45.04446]
#
# normal_vector = compute_normal_vector(point1, point2, point3)
# print(normal_vector)
# # 在上面的代码示例中,我们使用了numpy库来进行向量的计算。
# # compute_normal_vector函数接受三个点作为输入,然后使用numpy库中的array函数将这些点转换为数组。
# # 接着,我们计算两个向量vector1和vector2,它们分别是point2-point1和point3-point1。
# # 最后,我们使用numpy库中的cross函数计算向量的叉积,得到平面的法向量。


# import read_inp_auto as read_inp
import numpy as np


p1 =['        -114.42335', '      -23.94608', '      -46.53174']
p2 =['        -115.39657', '      -23.94313', '      -46.30191']
p3 =['        -115.09989', '      -23.98079', '      -45.04446']

def vector(p1,p2,p3):

    # 定义三个点的坐标
    point1 = np.array(p1)
    point2 = np.array(p2)
    point3 = np.array(p3)

    float_point1 = point1.astype(np.float64)
    float_point2 = point2.astype(np.float64)
    float_point3 = point3.astype(np.float64)
    # 计算两个向量
    vector1 = float_point2 - float_point1
    vector2 = float_point3 - float_point1

    # 计算法向量
    normal_vector = np.cross(vector1, vector2)

    # 归一化为单位向量
    unit_normal_vector = normal_vector / np.linalg.norm(normal_vector)
    vector_final =",".join(("{:.4f}".format(num) for num in unit_normal_vector))

    return vector_final
# print(vector(p1,p2,p3))


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SNCScan:针对SAP安全网络通信(SNC)的安全分析与评估工具

关于SNCScan SNCScan是一款针对SAP安全网络通信&#xff08;SNC&#xff09;的安全分析与评估工具&#xff0c;该工具旨在帮助广大研究人员分析SAP安全网络通信&#xff08;SNC&#xff09;&#xff0c;并分析和检测SNC配置与SAP组件中的潜在问题。 SNC系统参数 SNC基础 SAP协…

软件磁盘阵列与LVM

一、软件磁盘阵列 磁盘阵列&#xff08;RAID&#xff09;是通过硬件或软件技术将多个较小的磁盘整合成为一个较大的磁盘设备&#xff0c;而这个较大的磁盘除了存储还具备数据保护功能。 RAID分不同的级别&#xff0c;不同级别具有不同功能&#xff1a; 1、RAID 0&#xff1a;…

摸鱼大数据——select查询7-10

7、union联合查询 union: 对重复数据会去重 union all: 对重复数据不会去重 ​ 注意&#xff1a;union和union all中两边的字段&#xff08;类型、顺序&#xff09;要对应上 示例: use day08; select * from students; ​ select id,name from students where id in (95001,9…

读天才与算法:人脑与AI的数学思维笔记26_读后总结与感想兼导读

1. 基本信息 天才与算法&#xff1a;人脑与AI的数学思维 [英] 马库斯杜索托伊 &#xff08;Marcus du Sautoy&#xff09; 机械工业出版社,2020年4月出版 1.1. 读薄率 书籍总字数284千字&#xff0c;笔记总字数39047字。 读薄率39047284000≈13.7% 1.2. 读厚方向 千脑智…

Python—面向对象小解(3)

一、多态 多态指的是一类事物的多中形态 相同的方法&#xff0c;产生不同的执行结果 运算符 * 的多态 int int 加法计算 str str 字符串拼接 list list 列表的数据合并 在python中可以使用类实现一个多态效果 在python中使用重写的方式实现多态 &#xff08;1&#xff09;定…

Git-lfs入门使用教程

在备份我的毕设到github私有库的时候&#xff0c;发现git对于单文件大于100MB的会限制上传&#xff0c;一番折腾一下发现了git-lfs [Git LFS&#xff08;Large File Storage,大文件存储&#xff09;是 Github 开发的一个Git 的扩展&#xff0c;用于实现 Git 对大文件的支持]。 …

【效率提升】谷歌浏览器搜索技巧

文章目录 查找快速解答&#xff0c;以关键词形式进行搜索使用搜索运算符限定搜索范围&#xff0c;排除不相干内容使用高级搜索&#xff0c;可以搜索到更详细、具体、专业的结果 查找快速解答&#xff0c;以关键词形式进行搜索 想要哪个领域的快速解答&#xff0c;就使用哪个领…

星鸾云平台:高效配置Anaconda环境

星鸾云平台&#xff1a;高效配置Anaconda环境 多种算力资源和AI一体机在星鸾云平台上安装Anaconda并配置Python环境的步骤注册和登录体验GPU显卡服务选择服务器实例登陆GPU实例挂载数据盘配置CUDA环境安装Anaconda 星鸾云平台的优势 星鸾云平台以其卓越的产品功能和优势&#x…

期权交易有什么利弊点?

今天带你了解期权交易有什么利弊点&#xff1f;期权是一种合约&#xff0c;有看涨期权和看跌期权两种类型&#xff0c;也就是做多和做空两个方向&#xff0c;走势标的物对应大盘指数&#xff0c;这也是期权与其他金融工具的主要区别之一&#xff0c;可以用于套利&#xff0c;对…

Python中限制输入数值范围的技术性探讨

目录 一、引言 二、使用内置函数限制输入范围 三、使用条件语句进行范围检查 四、使用异常处理增强鲁棒性 五、结合第三方库进行输入验证 六、总结 一、引言 在Python编程中&#xff0c;用户输入是程序与用户交互的重要方式之一。然而&#xff0c;由于用户输入的多样…

实验室信息管理系统LIMS可以解决哪些问题

LIMS系统(Laboratory Information Management System)是一种专门针对实验室设计的信息管理系统&#xff0c;它能够帮助实验室解决一系列的问题&#xff0c;提高实验室的管理效率和数据可靠性。以下是LIMS系统可以解决的实验室问题&#xff1a; LIMS系统在实验室管理中的作用 1…

TDesign环境搭建-后台模板的安装和使用-构建web管理端后台系统

TDesign环境搭建-后台模板的安装和使用-构建web管理端后台系统 一、安装Nodejs 下载&#xff1a;nodejs 注意&#xff0c;目前前端代码使用的vue3做为脚手架进行开发&#xff0c;需要强制依赖node版本为16及以上 二、模板安装 2.1 安装脚手架&#xff1a;cli nodejs安装好之…

数字化校园建设让学习更加广阔

校园构建数字化校园的亮点是什么&#xff1f;校园以智能服务、才智办理、数字讲堂为中心内容的智慧校园建造&#xff0c;不只使师生作业和日子更高效&#xff0c;并且使他们有更多的时刻投入到智能教育和智能学习中去&#xff0c;进步教育质量&#xff0c;使学生走出校门时紧跟…

风电功率预测 | 基于TCN-GRU时间卷积门控循环单元的风电功率预测(附matlab完整源码)

完整代码 clc; clear close allX = xlsread(风电场预测.xlsx); X = X(5665:8640,:); %选取3月份数据 num_samples =

辅导男朋友转算法岗的第2天|self Attention与kv cache

文章目录 公式KV CacheMHA、MQA、GQA 面试题为什么除以 d k \sqrt{d_k} dk​ ​Multihead的好处decoder-only模型在训练阶段和推理阶段的input有什么不同&#xff1f;手撕必背-多头注意力 公式 $ \text{Output} \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \times …

nodemcu32s 和 mini D1 组局域网并用 webSocket 通信

实现思路 使用 mini D1 来搭建一个 webSocket 服务&#xff0c;然后使用 nodemcu32 连接&#xff0c;然后就可以进行通信了。 服务端代码&#xff08;mini D1&#xff09; 在代码中主要是需要控制好 loop 函数中的延时&#xff0c;也就是最后一行代码 delay&#xff0c;如果…

B端系统:角色与权限界面设计,一文读懂。

一、什么是角色与权限系统 角色与权限系统是一种用于管理和控制用户在系统中的访问和操作权限的机制。它通过将用户分配到不同的角色&#xff0c;并为每个角色分配相应的权限&#xff0c;来实现对系统资源的权限控制和管理。 在角色与权限系统中&#xff0c;通常会定义多个角色…

入门flask:Python后端开发的首选框架

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;从零开始学习弗拉斯克 二、弗拉斯克的微框架哲学 三、弗拉斯克的核心…

字符串匹配算法(一)BF算法、RK算法

文章目录 BF算法算法详解算法实现 RK算法算法详解算法实现 BF算法 算法详解 BF算法也就是Brute Force 算法&#xff0c;中文叫暴力匹配算法&#xff0c;也叫朴素匹配算法。模式串和主串&#xff1a;例如&#xff1a;我们在字符串A中查找字符串B&#xff0c;那么字符串A就是主…

留言板——增添功能(持久化存储数据,使用MyBatis)

目录 一、数据准备 二、引入MyBatis 和 MySQL驱动依赖 三、配置MySQL账号密码 四、编写后端代码 五、调整前端代码 六、测试 之前的代码&#xff1a;综合性练习&#xff08;后端代码练习3&#xff09;——留言板_在线留言板前后端交互-CSDN博客 一、数据准备 创建数据库…