2011-06-01 13 views
1

ElementTreeを使用して一連のXMLファイルを読み込み、解析します。ファイルが解析されるとき、私はそれからいくつかのビットのデータ(見出しとテキストの段落)をつかんでいます。私はその後、XMLに格納されているいくつかのファイル名を取得する必要があります。それらはContentItemという要素に含まれています。Python開発 - elementtree XMLと文字列操作

私のコードは、ビットのようになります。今

for item in dirlist: 
    newsML = ET.parse(item) 
    NewsLines = newsML.getroot() 
    HeadLine = NewsLines.getiterator("HeadLine") 
    result.append(HeadLine) 
    p = NewsLines.getiterator("p") 
    result.append(p) 
    ci = NewsLines.getiterator("ContentItem") 
    for i in ci: 
     result.append(i.attrib) 

ファイルの一種類のみがあった場合、これは罰金だったでしょうが、それは3つのタイプ(JPG、FLVやMP4)が含まれています。だから、私はそれらをループで見て、それはそれらを吐き出すが、私はただそれを望むなら、私はただFLVをつかむだけですか?またはちょうどmp4?それらは必ずしもリスト内で同じ順序で出現するとは限らない。

.mp4で終わるかどうかを判断する方法はありますか?この操作を行うか、それともテンプレートでもそれを行う方法はありますか?

これを行うとしたら、

 url = i.attrib 
     if url.get("Href",()).endswith('jpg'): 
      result.append(i.attrib) 

エラータプルオブジェクトには属性endswithがありません。なぜこれはタプルですか?私はそれが辞表だと思った?

+0

どう.endswith 'について()'(http://docs.python.org/library/stdtypes.html#str.endswith)または '.splitext()'(のhttp://ドキュメント.python.org/library/os.path.html#os.path.splitext)? – arie

+0

手順1:同じファイル名の問題を持つ他のすべてのユーザーを検索します。 http://stackoverflow.com/search?q=%5Bpython%5D+filename+match手順2:同様の質問を選択します。 http://stackoverflow.com/questions/296173/how-do-i-copy-files-with-specific-file-extension-to-a-folder-in-my-python-versio。ステップ3:他人が行ったことを読む。 –

+0

これは、同じことをやろうとしているわけではありません。要素属性のテキストと照合したいだけです。 – Matthew

答えて

2

url.get()のデフォルトの戻り値としてタプル(括弧)を指定すると、タプルが得られます。空の文字列を指定すると、.endswith()メソッドを使用できます。また、要素自体には属性値を取得するためのget()メソッドがあります(.attribを経由する必要はありません)。例:

if i.get('Href', '').endswith('.jpg'): 
    result.append(i.attrib) 
+0

非常に参考になりました – Matthew