2009-12-09 15 views
15

Django'nun forms.FileField'u kullanarak yüklenen bir dosya ile çalışıyorum. Bu, InMemoryUploadedFile türünde bir nesne döndürür.Evrensel yeni satır modunda yüklenen bir dosyaya nasıl erişebilirim?

Bu dosyaya evrensel yeni satır modunda erişmem gerekiyor. Dosyayı kaydetmeden ve yeniden açmadan bunu nasıl yapacağınıza dair herhangi bir fikir var mı?

Teşekkür

cevap

14

Python 2.6 kullanıyorsanız veya üstü, siz (okuma() yöntemini kullanarak) belleğe dosyanızı okuduktan sonra io.StringIO sınıfını kullanabilirsiniz. Örnek:

>>> 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'] 

aslında Django görünümünde bu kullanmak için, unicode için giriş dosyası verilerini dönüştürmek gerekebilir: Bu harika çalışıyor

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

. Ben django görünümünde csv.DictReader ile birlikte kullanın. 'reader = csv.DictReader (stream)' 'okuyucunun satır için: # her satırın hedeflenmesi 'Bunun bellek kullanımıyla ne yapacağına dair herhangi bir düşünce var mı? Ben bir 'bütçe' var :) Ben muhtemelen sadece geçici bir konumda dosyayı kaydetmek gerekir biliyorum ama zaman için herhangi bir çöp gibi temizlik yapmak gerekiyorsa merak mıyım? – teewuane

İlgili konular