我有一个看起来像这样的csv文件:
artist,year,id,video_name,new_video_id,file_root_name,video_type
,,,,,,
Clay Aiken,1,clay_aiken,Sorry Seems To Be...,sorry-seems-to-be,02_sc_ca_sorry,FLV
Clay Aiken,1,clay_aiken,Everything I Do (I Do It For You),everything-i-do-i-do-it-for-you,03_sc_ca_everything,FLV
Clay Aiken,1,clay_aiken,A Thousand Days,a-thousand-days,04_sc_ca_thousandda,FLV
Clay Aiken,1,clay_aiken,Here You Come Again,here-you-come-again,05_sc_ca_hereyoucom,FLV
Clay Aiken,1,clay_aiken,Interview,interview,06_sc_ca_intv,FLV
Run Code Online (Sandbox Code Playgroud)
上面的每一行都会生成一个单独的xml文件,如下所示(准确地说是5个):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd">
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<head>
<meta base="rtmp://cp23636.edgefcs.net/ondemand" />
</head>
<body>
<switch>
<video src="mp4:soundcheck/%year/%id/%file_root_name_256.mp4" system-bitrate="336000"/>
<video src="mp4:soundcheck/%year/%id/%file_root_name_512.mp4" system-bitrate="592000"/>
<video src="mp4:soundcheck/%year/%id/%file_root_name_768.mp4" system-bitrate="848000"/>
<video src="mp4:soundcheck/%year/%id/%file_root_name_1128.mp4" system-bitrate="1208000"/>
</switch>
</body>
</smil>
Run Code Online (Sandbox Code Playgroud)
命名为%new_video_id.smil
我想出了如何解析csv文件:
import csv
import sys
f = open(sys.argv[1], 'rU')
reader = csv.reader(f)
for row in reader:
year = row[1]
id = row[2]
file_root_name = row[5]
print year, id, file_root_name
Run Code Online (Sandbox Code Playgroud)
在编写xml文件时,如何获取每个变量并包含它们?
我将从这样的事情开始:
import csv
import sys
from xml.etree import ElementTree
from xml.dom import minidom
video_data = ((256, 336000),
(512, 592000),
(768, 848000),
(1128, 1208000))
with open(sys.argv[1], 'rU') as f:
reader = csv.DictReader(f)
for row in reader:
switch_tag = ElementTree.Element('switch')
for suffix, bitrate in video_data:
attrs = {'src': ("mp4:soundcheck/{year}/{id}/{file_root_name}_{suffix}.mp4"
.format(suffix=str(suffix), **row)),
'system-bitrate': str(bitrate),
}
ElementTree.SubElement(switch_tag, 'video', attrs)
print minidom.parseString(ElementTree.tostring(switch_tag)).toprettyxml()
Run Code Online (Sandbox Code Playgroud)
基本上,在解析csv文件时,使用该行中的属性创建一个xml文档,以一个接一个地创建视频标签。
输出示例(一行):
<?xml version="1.0" ?>
<switch>
<video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_256.mp4" system-bitrate="336000"/>
<video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_512.mp4" system-bitrate="592000"/>
<video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_768.mp4" system-bitrate="848000"/>
<video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_1128.mp4" system-bitrate="1208000"/>
</switch>
Run Code Online (Sandbox Code Playgroud)
注意:ElementTree不支持漂亮的打印,因此我使用了PyMOTW中介绍的技巧。