какова кодировка загрузки файла .ogg в mongodb с помощью python?

Я пишу скрипт для загрузки файла .ogg в mongodb через python. я использую python 3.6 и недавно изучаю, поэтому у меня нет никаких идей. пожалуйста, помогите мне.

это мой код:

from pymongo import MongoClient
import gridfs
import os`

db=MongoClient().FypDatabase
fs=gridfs.GridFS(db,collection='video')
fs.put(open('C:\\testStream5.ogg','UTF-8'))`

но он говорит:

Traceback (most recent call last):
    File "C:\Users\chingyi\Desktop\testUp.py", line 16, in <module>
        fs.put(open('C:\\testStream5.ogg','UTF-8'))
            ValueError: invalid mode: 'UTF-8'`

Я должен был сделать некоторые исследования. Я знал, что должен написать кодировку внутри, например: поэтому я также пишу fs.put(fileName, 'UTF-8'), я прочитал эту страницу: кодировка говорит [ "кодировка": кодировка, используемая для этого файла. В Python 2 любой юникод, записанный в файл, будет преобразован в строку str. В Python 3 любая строка, записанная в файл, будет преобразована в байты.]


person rcm    schedule 29.12.2016    source источник


Ответы (1)


Файлы OGG Vorbis являются двоичными файлами, они не имеют кодировки текстовых символов.

Вам нужно указать аргумент кодировки для GridFs только в том случае, если ваши данные имеют формат str. Точно так же вам нужно передать кодировку в open() только в том случае, если файл является текстовым и не находится в кодировке по умолчанию для вашей платформы.

В вашем случае, когда вы имеете дело с двоичным файлом, вам нужно установить режим файла на двоичный, что сводит на нет аргумент кодирования. Режим двоичного файла только для чтения указывается как rb.

Поэтому вам просто нужно сделать:

fs.put(open('C:\\testStream5.ogg', mode='rb'))
person Alastair McCormack    schedule 29.12.2016
comment
Спасибо за вашу помощь, и он может успешно загрузиться. однако я не могу найти атрибут имени файла и атрибут типа содержимого в моем файле mongodb fs.files. это автоматическая запись имени файла и типа содержимого, где я fs.put(filePath)? - person rcm; 30.12.2016
comment
передать filename в качестве дополнительного аргумента для put. - person Alastair McCormack; 30.12.2016