You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:37:07