함수를 동적으로 생성 할 수 있습니까?파이썬 - 함수를 동적으로 스폰 할 수 있습니까?
이 example.xml 파일을 구문 분석하고 list_1 요소의 특성을 목록으로 반환하는 함수를 작성했습니다. 이제이 예제에는 4 개의 세그먼트가 포함되어 있습니다. 그러나이 세그먼트는 서로 다른 자산에 대해 변경되며 하나는 세그먼트 만 가질 수 있고 다른 세그먼트는 10+를 가질 수 있습니다. 최대 4 개의 세그먼트의와 자산을 처리 할 문이와 나는 항상이 자산에 대해 그 코드에 추가 할 수 있다면 나는 70 선을 작성했습니다
<?xml version="1.0" encoding="utf-8"?>
<manifest task_id="00000000112">
<asset_metadata>
<material_id>LB000001</material_id>
<series_title>test asset 1</series_title>
<season_title>Number 1</season_title>
<season_number>1</season_number>
<episode_title>ET 1</episode_title>
<episode_number>1</episode_number>
<start_date>18-11-2016</start_date>
<end_date>30-11-2016</end_date>
<ratings>15</ratings>
<synopsis>This is a test asset</synopsis>
</asset_metadata>
<file_info>
<source_filename>LB000001</source_filename>
<number_of_segments>4</number_of_segments>
<segment_1 seg_1_in="00:00:00.000" seg_1_out="00:01:00.000" seg_1_dur="00:01:00.000"/>
<segment_2 seg_2_in="00:02:00.000" seg_2_out="00:03:00.000" seg_2_dur="00:01:00.000"/>
<segment_3 seg_3_in="00:04:00.000" seg_3_out="00:05:00.000" seg_3_dur="00:01:00.000"/>
<segment_4 seg_4_in="00:06:00.000" seg_4_out="00:07:00.000" seg_4_dur="00:01:00.000"/>
<conform_profile definition="hd" aspect_ratio="16f16">ffmpeg -progress LOG_FILE.txt -i S_PATH/F_NAME.mp4 SEG_CONFORM</conform_profile>
<transcode_profile profile_name="amazon" package_type="tar">ffmpeg -safe 0 -progress LOG_FILE.txt -f concat -i T_PATH/CONFORM_LIST TRC_PATH/F_NAME.mp4</transcode_profile>
<target_path>F:/profiles/amazon</target_path>
</file_info>
</manifest>
: 여기
는 4 개 개의 세그먼트가있는 예제 XML이다 : 이상적으로<number_of_segments>4</number_of_segments>
그것의 X 양을 생성 할 것이다 : 나는 동적으로 XML에서이 요소를 기반으로 세그먼트 목록을 생성하는 기능을하고 있어요, 그래서 더 세그먼트는, 그러나 그것은 매우 우아하지 않습니다
return seg_element(root, path)
parse_xml() 함수는 자산의 세그먼트 수를 기반으로합니다.
찾는 기능이다 : 여기
import xml.etree.ElementTree as et
file = 'example.xml'
# Seg_element
def seg_element(xml_root, element_path):
list_a = []
for elem in xml_root.iterfind(element_path):
a = elem.attrib
for i in a:
list_a.append([i + ' = ' + a[i]])
return list_a
# Parse_xml
def parse_xml(file_input, number_of_segments):
tree = et.parse(file_input)
root = tree.getroot()
path = 'file_info/segment_1'
return seg_element(root, path)
for i in parse_xml(file, 1):
print(i)
출력이다
seg_element의 각 반복 (의해 생성 된리스트의 이름
['seg_1_dur = 00:01:00.000']
['seg_1_in = 00:00:00.000']
['seg_1_out = 00:01:00.000']
)가 다른 것이다. 기능을 생성 할 필요가 없습니다 명령 http://pastebin.com/jgawC48Y
난 이해가 안돼 : 세그먼트의 수, 그에 따라
seg_element
함수를 호출합니다. 너의보기에서 관계없는 쓰레기를 자른다. 그리고 당신이 언급 한 70 줄'if' 체인의 일부를 보여줍니다. –원하는 최종 결과가 왜 필요한지 물어보아야합니까? 그 인쇄물로 잘하고있는 것 같아. –
자세한 내용은 편집을 참조하십시오. – Lewis909