2013-12-12 15 views
5

Zapisanie pliku w GridFS Mongodb z pymongo powoduje skrócenie pliku.Zapisywanie pliku w GridFS Mongodb z pymongo skutkuje obcięciem pliku - python 2.7 na Windows 7

from pymongo import MongoClient 
import gridfs 
import os 

#just to make sure we aren't crazy, check the filesize on disk: 
print os.path.getsize(r'owl.jpg') 

#add the file to GridFS, per the pymongo documentation: http://api.mongodb.org/python/current/examples/gridfs.html 
db = MongoClient().myDB 
fs = gridfs.GridFS(db) 
fileID = fs.put(open(r'owl.jpg', 'r') ) 
out = fs.get(fileID) 
print out.length 

W Windows 7, działa ten program generuje ten wynik:

145047 
864 

Na Ubuntu działa ten program generuje to (prawidłowy) Wyjście:

145047 
145047 

Niestety, aplikacja I nad którym pracuję jest system operacyjny Windows ...

Każda pomoc będzie doceniona Ed!

więc można odtworzyć za moim przykładem bardziej rygorystycznie 'owl.jpg' został pobrany z: http://getintobirds.audubon.org/sites/default/files/photos/wildlife_barn_owl.jpg

Odpowiedz

5

Heh, zmieniając

fileID = fs.put(open(r'owl.jpg', 'r') ) 

do:

fileID = fs.put(open(r'owl.jpg', 'rb') ) 

ustala zachowanie program w systemie Windows 7. Szkoda, że ​​zachowanie różni się między OS ...

+0

Nawet na Linuksie musiałem otworzyć plik z "rb", inaczej dostałbym "błąd" "nie obsługuje interfejsu bufora" –

3

macie już odpowiedź, ale dla ciekawskich:

http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

W Windows, „b” przyłączoną do trybu otwiera plik w trybie binarnym, więc nie są tryby również jak „rb”, "wb" i "r + b". Python w systemie Windows rozróżnia tekst i pliki binarne; znaki końca linii w plikach tekstowych są automatycznie zmieniane nieznacznie, gdy dane są odczytywane lub zapisywane. Ta "zakulisowa" modyfikacja danych pliku jest w porządku dla plików tekstowych ASCII, ale spowoduje to uszkodzenie danych binarnych, takich jak w plikach JPEG lub EXE. Zachowaj ostrożność, aby korzystać z trybu binarnego podczas odczytywania i zapisywania takich plików.

Powiązane problemy