亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python, 使用來自其他.py文件中函數的全局變量 / 名稱錯誤

Python, 使用來自其他.py文件中函數的全局變量 / 名稱錯誤

慕尼黑5688855 2022-09-13 17:49:23
get_asset_type_v001.pyimport redef get_asset_type(filename):    """Check filename for asset type"""    global is_vfx_file, is_edit_file, proj_yy, client, show, edit_version, edit_stage, tv, pv, date, seq_nr, seq_name, shot_nr, shot_name    is_vfx_file = False    is_edit_file = False    if re.match(edit_pattern, filename):  # Check if file is a edit prev        print("\nFile is an Edit prev. Filename: {}".format(filename))        proj_yy, client, show, edit_version, edit_stage, tv, pv, date, *_ = filename.split("_")        is_edit_file = True    if re.match(vfx_pattern, filename):  # Check if file is a VFX prev        print("\nFile is a VFX prev. Filename: {}".format(filename))        seq_nr, seq_name, shot_nr, shot_name, *_ = filename.split("_")        is_vfx_file = True# get_asset_type(sample_vfx_filename) # Call function to return is vfx file and print result# print(is_vfx_file)  # Check if it's a vfx file在同一文件中打印函數的工作方式類似于魅力。print('_'.join(list((seq_nr, seq_name, shot_nr, shot_name))))main_programm_file_v001.pyfrom get_asset_type_v001 import *  # Import function ti check what asset type it isfilename = sample_vfx_filenameget_asset_type(filename)  # Code workes fine till this lineprint('_'.join(list((seq_nr, seq_name, shot_nr, shot_name))))  # The variables in this line "seq_nr..." are making the problem但是,嘗試在另一個文件中使用導入函數中的代碼會引發以下錯誤。似乎我無法訪問全局變量。名稱錯誤:未定義名稱“seq_nr”
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

我將重新定義該函數以返回一個值,其中包含有關傳遞的文件名類型的元數據。舉個例子:


import re


def get_asset_type(filename):

    """Check filename for asset type"""

    if re.match(edit_pattern, filename):

        print("\nFile is an Edit prev. Filename: {}".format(filename))

        fields = filename.split("_")

        return {'type': 'edit',

                'proj_yy': fields[0],

                'client': fields[1],

                ...}

    if re.match(vfx_pattern, filename):  # Check if file is a VFX prev

        print("\nFile is a VFX prev. Filename: {}".format(filename))

        fields = filename.split("_")

        return {'type': 'vfx',

                'seq_nr': fields[0],

                'seq_name': fields[1],

                ...}

您的正則表達式很可能可以使用捕獲組來定義,以避免隨后拆分文件名的需要;如果模式匹配,則返回值將已包含相關組件。


然后在您的主程序中:


import get_asset_type_v001


filename = sample_vfx_filename


result = get_asset_type_v001.get_asset_type(filename)

if result['type'] == 'vfx':

    print('_'.join([result['seq_nr'], result['seq_name'], ...]))


查看完整回答
反對 回復 2022-09-13
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

具有捕獲組的選項:


def get_asset_type(filename): # V003

    """Check filename for asset type"""

    n = re.match(edit_pattern, filename)

    if n:  # Check if file is a edit prev

        print("\nFile is an Edit prev. Filename: {}".format(filename))

        fields = filename.split("_")

        return {'type': 'edit',

                'proj_yy': n.group('proj_yy'),

                'client': n.group('client'),

                'show': n.group('show'),

                'edit_version': n.group('edit_version'),

                'edit_stage': n.group('edit_stage'),

                'tv': n.group('tv'),

                'pv': n.group('pv'),

                'date': n.group('date'),

                }

    m = re.match(vfx_pattern, filename)

    if m:  # Check if file is a VFX prev

        print("\nFile is a VFX prev. Filename: {}".format(filename))

        print(m.group('seq_name'))

        return {'type': 'vfx',

                'seq_nr': m.group('seq_nr'),

                'seq_name': m.group('seq_name'),

                'shot_nr': m.group('shot_nr'),

                'shot_name': m.group('shot_name')

                }


查看完整回答
反對 回復 2022-09-13
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號