2011-12-30 19 views
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 

答えて

1

は、私は従うことをわからないんだけど、

attrs = {'src': ("mp4:soundcheck/{year}/{id}/{file_root_name}_{suffix}.mp4" 
          .format(suffix=str(suffix), **row)), 
        'system-bitrate': str(bitrate), 
        } 

作品その後、ラインならば「file_root_nameは」dictlike対象行の文字列キーでなければなりません。ライン

output = open('file_root_name'+'.smil', 'w') 

は実際には '.smil' が文字列 'file_root_name' を兼ね備えています。だから、あなたが本当にところで、ライン

output.close 

はあなたがoutput.close(たくanything--行うことはありません

output = open(row['file_root_name']+'.smil', 'w') 

ような何かをしたいと思います)の代わりに、または単に

with open(row['file_root_name']+'.smil', 'w') as output: 
    output.write(xml + doctype + doc) 
+0

行は動作しますが、 'print file_root_name'を実行しようとすると、' NameError:name 'file_root_name'が定義されていません。 'attrs'内で動作している間は、変数としては機能しません。 –

+1

変数ではないため動作しません。 'file_root_name'は、行ディクショナリ内のキーで、関連する値(「fred」など)が関連付けられています。しかし、必要ならば 'file_root_name = row [" file_root_name "]'を使うだけです。 – DSM

関連する問題