2011-10-17 75 views
2

收到文件我有一個輸入標籤的形式和一個提交按鈕:蟒蛇從HTML表單

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

我有一個處理後的Python文件:

def post(self): 

的文件,我'在表單中接收的是一個.xml文件,在python post函數中,我想將'foo.xml'發送給另一個將驗證它的函數(使用minixsv)

我的問題是如何檢索文件?我想:

form = cgi.FieldStorage() 

inputfile = form.getvalue('filename') 

,但是這使內容在inputfile中,我沒有「foo.xml」文件本身,我可以傳遞給minisxv功能,要求.xml文件不是文本...

更新我發現,接受文本的功能,而不是輸入文件,還是要謝謝你

回答

2

通常情況下,還有一個函數從字符串中提取XML。例如,minidom有parseString和lxml etree.XML

如果你的內容,你可以用StringIO一個類似文件的對象:

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

如果你必須在磁盤上的文件,使用tempfile.mkstemp

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

這可能將不會是最好的答案,但爲什麼不考慮在inputfile變量上使用StringIO,並將StringIO對象作爲文件句柄傳遞給您的minisxv函數?或者,爲什麼不打開的實際新文件句柄,將輸入文件的內容保存到它(即通過open),然後將傳遞給您的minisxv函數?