Python循环在特定软件中的应用:新手循环任务与导出命名问题
问题描述
我是Python新手,在某特定软件中尝试循环执行一系列任务时遇到问题。我通过自定义对话框输入循环次数,期望每次循环时,数据导出文件能按Export_1、Export_2……的格式依次命名。我曾尝试用for i in range(1, number_of_times+1):语句,并把变量i替换到导出文件名里,但只输出了1到输入次数的数字,其余任务只执行了一次,只导出了一个数据集,没实现完整循环。
以下是未添加循环的基础代码:
# -*- coding: utf-8 -*- import gom import math RESULT=gom.script.sys.execute_user_defined_dialog (content='<dialog>' \ ' <title>Message</title>' \ ' <style></style>' \ ' <control id="OkCancel"/>' \ ' <position>automatic</position>' \ ' <embedding>always_toplevel</embedding>' \ ' <sizemode>automatic</sizemode>' \ ' <size width="238" height="176"/>' \ ' <content rows="1" columns="2">' \ ' <widget row="0" column="0" rowspan="1" type="label" columnspan="1">' \ ' <name>label</name>' \ ' <tooltip></tooltip>' \ ' <text># OF LOOPS</text>' \ ' <word_wrap>false</word_wrap>' \ ' </widget>' \ ' <widget row="0" column="1" rowspan="1" type="input::string" columnspan="1">' \ ' <name>input</name>' \ ' <tooltip></tooltip>' \ ' <value></value>' \ ' <read_only>false</read_only>' \ ' </widget>' \ ' </content>' \ '</dialog>') gom.script.sys.recalculate_project (with_reports=False) CAD_ALIGNMENT=gom.script.transform_element.by_rotation ( Angle = 360/RESULT.input, elements=[gom.app.project.inspection['TEST SECTION.Line profile'], gom.app.project.inspection['TEST SURFACE.Surface profile'], gom.app.project.inspection['TEST SECTION'], gom.app.project.actual_elements['TEST SECTION'], gom.app.project.inspection['TEST PT 003'], gom.app.project.inspection['TEST SURFACE'], gom.app.project.inspection['TEST PT 004'], gom.app.project.inspection['TEST PT 005'], gom.app.project.inspection['TEST PT 002'], gom.app.project.inspection['TEST PT 001'], gom.app.project.actual_elements['TEST SURFACE'], gom.app.project.actual_elements['TEST PT 001'], gom.app.project.actual_elements['TEST PT 005'], gom.app.project.actual_elements['TEST PT 002'], gom.app.project.actual_elements['TEST PT 004'], gom.app.project.actual_elements['TEST PT 003'], gom.app.project.inspection['TEST PT 001.dN'], gom.app.project.inspection['TEST PT 003.dN'], gom.app.project.inspection['TEST PT 002.dN'], gom.app.project.inspection['TEST PT 005.dN'], gom.app.project.inspection['TEST PT 004.dN']], invert_transformation=False, line=gom.app.system['system_line_x']) gom.script.sys.recalculate_project (with_reports=False) gom.script.view.set_tab_visible ( view='table', visible=True) gom.script.table.export_table_contents ( cell_separator=',', codec='iso 8859-1', decimal_separator='.', elements=[gom.app.project.inspection['TEST SECTION.Line profile'], gom.app.project.inspection['TEST SURFACE.Surface profile'], gom.app.project.inspection['TEST PT 002.dN'], gom.app.project.inspection['TEST PT 005.dN'], gom.app.project.inspection['TEST PT 004.dN'], gom.app.project.inspection['TEST PT 006.dN'], gom.app.project.inspection['TEST PT 003.dN'], gom.app.project.inspection['TEST PT 001.dN']], file='C:/Users/culp/Documents/Export_1.csv', header_export=True, line_feed=' ', sort_column=0, sort_order='ascending', template_name='Details', text_quoting='', write_one_line_per_element=False) gom.script.view.set_tab_visible ( view='table', visible=False)
解决方案
问题核心是你只把文件名替换部分放到了循环里,所有需要重复执行的操作(重新计算、旋转、导出等)都要缩进后放入for循环块,另外还要注意把对话框输入的字符串转换成整数,避免角度计算时报错。
修改后的代码如下:
# -*- coding: utf-8 -*- import gom import math RESULT=gom.script.sys.execute_user_defined_dialog (content='<dialog>' \ ' <title>Message</title>' \ ' <style></style>' \ ' <control id="OkCancel"/>' \ ' <position>automatic</position>' \ ' <embedding>always_toplevel</embedding>' \ ' <sizemode>automatic</sizemode>' \ ' <size width="238" height="176"/>' \ ' <content rows="1" columns="2">' \ ' <widget row="0" column="0" rowspan="1" type="label" columnspan="1">' \ ' <name>label</name>' \ ' <tooltip></tooltip>' \ ' <text># OF LOOPS</text>' \ ' <word_wrap>false</word_wrap>' \ ' </widget>' \ ' <widget row="0" column="1" rowspan="1" type="input::string" columnspan="1">' \ ' <name>input</name>' \ ' <tooltip></tooltip>' \ ' <value></value>' \ ' <read_only>false</read_only>' \ ' </widget>' \ ' </content>' \ '</dialog>') # 将输入的字符串转为整数,避免除法报错 number_of_loops = int(RESULT.input) # 计算每次循环的旋转角度 rotation_angle = 360 / number_of_loops for i in range(1, number_of_loops + 1): gom.script.sys.recalculate_project (with_reports=False) CAD_ALIGNMENT=gom.script.transform_element.by_rotation ( Angle = rotation_angle, elements=[gom.app.project.inspection['TEST SECTION.Line profile'], gom.app.project.inspection['TEST SURFACE.Surface profile'], gom.app.project.inspection['TEST SECTION'], gom.app.project.actual_elements['TEST SECTION'], gom.app.project.inspection['TEST PT 003'], gom.app.project.inspection['TEST SURFACE'], gom.app.project.inspection['TEST PT 004'], gom.app.project.inspection['TEST PT 005'], gom.app.project.inspection['TEST PT 002'], gom.app.project.inspection['TEST PT 001'], gom.app.project.actual_elements['TEST SURFACE'], gom.app.project.actual_elements['TEST PT 001'], gom.app.project.actual_elements['TEST PT 005'], gom.app.project.actual_elements['TEST PT 002'], gom.app.project.actual_elements['TEST PT 004'], gom.app.project.actual_elements['TEST PT 003'], gom.app.project.inspection['TEST PT 001.dN'], gom.app.project.inspection['TEST PT 003.dN'], gom.app.project.inspection['TEST PT 002.dN'], gom.app.project.inspection['TEST PT 005.dN'], gom.app.project.inspection['TEST PT 004.dN']], invert_transformation=False, line=gom.app.system['system_line_x']) gom.script.sys.recalculate_project (with_reports=False) gom.script.view.set_tab_visible ( view='table', visible=True) gom.script.table.export_table_contents ( cell_separator=',', codec='iso 8859-1', decimal_separator='.', elements=[gom.app.project.inspection['TEST SECTION.Line profile'], gom.app.project.inspection['TEST SURFACE.Surface profile'], gom.app.project.inspection['TEST PT 002.dN'], gom.app.project.inspection['TEST PT 005.dN'], gom.app.project.inspection['TEST PT 004.dN'], gom.app.project.inspection['TEST PT 006.dN'], gom.app.project.inspection['TEST PT 003.dN'], gom.app.project.inspection['TEST PT 001.dN']], file=f'C:/Users/culp/Documents/Export_{i}.csv', header_export=True, line_feed=' ', sort_column=0, sort_order='ascending', template_name='Details', text_quoting='', write_one_line_per_element=False) gom.script.view.set_tab_visible ( view='table', visible=False)
关键修改说明
- 把对话框输入的
RESULT.input转换成整数number_of_loops,避免字符串与数字运算报错 - 提前计算好每次循环的旋转角度
rotation_angle,避免重复计算 - 将所有需要循环执行的操作(重新计算项目、旋转元素、导出数据等)全部缩进,放入
for循环的代码块内 - 使用f-string格式化导出文件名:
f'C:/Users/culp/Documents/Export_{i}.csv',实现按循环序号命名文件
内容的提问来源于stack exchange,提问作者CulpJames
相关产品推荐
相关产品推荐

