0
このスクリプトからの出力をcsv内のセルに基づくファイルに保存しようとしています。変数{file_root_name}
を呼び出してxmlファイルに書き込むことはできますが、ファイル名を書き込む変数として書き込むことはできません。変数file_root_name
を変数として使用してファイル名を生成するにはどうすればよいですか?CSVセルPythonに基づいてXMLファイル名を書き込む
import csv
import sys
from xml.etree import ElementTree
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
from xml.dom import minidom
def prettify(elem):
"""Return a pretty-printed XML string for the Element.
"""
rough_string = ElementTree.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ", encoding = 'utf-8')
doctype = '<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd">'
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:
root = Element('smil')
root.set('xmlns', 'http://www.w3.org/2001/SMIL20/Language')
head = SubElement(root, 'head')
meta = SubElement(head, 'meta base="rtmp://cp23636.edgefcs.net/ondemand"')
body = SubElement(root, 'body')
switch_tag = ElementTree.SubElement(body, '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)
xml, doc = prettify(root).split('\n', 1)
output = open('file_root_name'+'.smil', 'w')
output.write(xml + doctype + doc)
output.close
行は動作しますが、 'print file_root_name'を実行しようとすると、' NameError:name 'file_root_name'が定義されていません。 'attrs'内で動作している間は、変数としては機能しません。 –
変数ではないため動作しません。 'file_root_name'は、行ディクショナリ内のキーで、関連する値(「fred」など)が関連付けられています。しかし、必要ならば 'file_root_name = row [" file_root_name "]'を使うだけです。 – DSM