2011-10-17 20 views
2

からファイルを受信します。Pythonは、私はinputタグと送信ボタンを持つフォームを持つHTMLフォーム

<input type="file" name="filename" size="25"> 

私はポストを扱うPythonのファイルを持っている:

def post(self): 

Iファイルをフォームの受信は、Pythonのポスト関数で.xmlファイルです。その 'foo.xml'を(minixsvを使用して)検証する別の関数に送信します。

私の質問はどうですかファイルを取得しますか?私が試した:

form = cgi.FieldStorage() 

inputfile = form.getvalue('filename') 

をしかし、これはinputfileの内容を置く、私は.xmlファイルではないテキストを要求minisxv関数に渡すことができます「foo.xml」ファイルをそれ自体はありません...

更新私は多くの場合、文字列からXMLを抽出する機能もありますおかげでとにかく

答えて

2

、代わりに入力ファイルのテキストを受け入れる機能を発見しました。たとえば、minidomはparseString、lxmlはetree.XMLです。

あなたがコンテンツを持っている場合は、StringIOを持つファイルのようなオブジェクトを作ることができます。おそらく

import tempfile 
content = form.getvalue('filename') 
tmpf, tmpfn = tempfile.mkstemp() 
tmpf.write(content) 
tmpf.close() 
# Now, give tmpfn to the function expecting a filename 

os.unlink(tmpfn) # Finally, delete the file 
0

この:あなたはディスク上のファイルを持っていなければならない場合

from StringIO import StringIO 
content = form.getvalue('filename') 
fileh = StringIO(content) 
# You can now call fileh.read, or iterate over it 

tempfile.mkstempを使用最良の答えではないが、なぜあなたのinputfile変数にStringIOを使用して、あなたのminisxv関数にファイルハンドルとしてStringIOオブジェクトを渡すことを検討していないのだろうか?代わりに、の実際の新しいファイルハンドルを開き、inputfileの内容を(つまり、open経由で)保存し、をminisxv関数に渡します。

関連する問題