2009-12-09 49 views
15

我正在使用使用Django的forms.FileField上傳的文件。這將返回一個類型爲InMemoryUploadedFile的對象。如何以通用換行模式訪問上傳的文件?

我需要以通用換行模式訪問此文件。任何想法如何做到這一點,而不保存,然後重新打開文件?

感謝

回答

14

如果您正在使用Python 2.6倍,你可以在閱讀您的文件到內存(使用read()方法)後使用io.StringIO類。例如:

>>> import io 
>>> s = u"a\r\nb\nc\rd" 
>>> sio = io.StringIO(s, newline=None) 
>>> sio.readlines() 
[u'a\n', u'b\n', u'c\n', u'd'] 

要真正在你的Django視圖中使用此,您可能需要輸入文件的數據轉換爲Unicode:

stream = io.StringIO(unicode(request.FILES['foo'].read()), newline=None) 
+0

這個偉大的工程。我在我的Django視圖中使用它和csv.DictReader一起。 '讀者= csv.DictReader(流)'然後'在閱讀器中的行:#import each row'任何想法,這將做什麼內存使用?我在'預算'上:)我知道我應該把文件保存在一個臨時位置,但是我很好奇,如果現在我需要做任何垃圾一樣的清理? – teewuane 2014-12-29 21:05:17

相關問題