Как я могу загрузить файл .docx в мой GoogleDrive с Python? - PullRequest
0 голосов
/ 05 июня 2019

Я написал простой скрипт для загрузки файла .docx в мою учетную запись GoogleDrive. Работает отлично, кроме файла .. Аутентификация работает, загрузка файла работает. У меня были некоторые проблемы с кодировкой, но теперь с Latin-1 я могу загрузить файл без ошибок. Но после загрузки есть только документ без названия с таким содержанием:

[Content_Types] .xml l "% 3 ^ i7 +% p) O 5} nH" t4Q + | T \ y _rels / .rels jH [{l0 /% word / _rels / document.xml.rels} -;} PB [^^l :>S!?p (!O>z word/document.xml )Zb#~J K{N$ 7R'~/ $]t# V-wZ TMco %NPB5 ~e!(m zJSC aPdO4 Jr#Cv l%|Y AxQT;K3[ word/theme/theme1.xml p{{<F! :@q" ?~|f hNC- 055B jf;a ssFb dZ#QZn: ]{,n t}Vz}1 !(~X "(<Ik^> o[HD kW:A word/settings.xml rZiidm &sY5 \w'5>X ^JL\ I'I6 9FVM v8:y- o9E1G "ogH:: nM word / fontTable.xml WkU + PlQ (! IX (* +> _ ze | PXPD OJK? EK # 83> word / webSettings.xml Bk "15i I? | RjRlq docProps/app.xml X2<$ I3S.u docProps/core.xml P nQ d \ l2) C5 $ Tehk J06t UUA5iQ 10Tse >yx\-P word/styles.xml IPL0 U&dz2 5&{K 5IwM ,x9fY( fMNF< {2bjkrj G!vMD -TA{ ~TAG 0Epr 9F{7w x0-d x^(G ynL" fl9g2z Z{Jtx [z^| Q)aaT2X )aD[ qfaT z#B^ -iwJ x_}[ I]Qx3 eTHA cTHA py}) t /5DyK hnB_ )5.[ %5.[ /5.[ eKmR )5.[ CfmmV RyxS%u u}nY xegY' & m] n [Content_Types] .xmlPK _rels / .relsPK word / _rels / document.xml.relsPK word / document.xmlPK word / theme / theme1.xmlPK word / settings.xmlPK word / fontTable.xmlPK word / webSettings .xmlPK RjRlq docProps / app.xmlPK docProps / core.xmlPK word / styles.xmlPK

Как я могу заставить скрипт обрабатывать формат .docx? Я читал, что файлы .docx на самом деле являются zip-файлами, это правда?

И еще вопрос: Как я могу загрузить файл в определенную папку GoogleDrive? Нужно ли указывать это в моем проекте GoogleDrive-API?

Заранее спасибо :)

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import os

g_login = GoogleAuth()
g_login.LocalWebserverAuth()
drive = GoogleDrive(g_login)

test = "Path to my BA_UploadTest.docx"
with open(test, "r", encoding="Latin-1")as file:
  fn = os.path.basename(file.name)
  file_drive = drive.CreateFile({'BA_UploadTest.docx':     os.path.basename(file.name)})
file_drive.SetContentString(file.read())
file_drive.Upload()
print('File upload successful!')

1 Ответ

0 голосов
/ 21 июня 2019

Используя код быстрого запуска Python, предоставленный в Документации по Google Drive API , вы можете загружать файлы на Google Drive, указав MIME-тип файла в запросе, а не полагаться на значение по умолчанию * 1003. * как указано в MediaFileUpload классе .

Тип MIME для .docx файлов равен application/vnd.openxmlformats-officedocument.wordprocessingml.document, поэтому его можно установить таким образом. Используя приведенный ниже код, я смог загрузить .docx файлы на мой диск Google без каких-либо проблем с кодировкой или читабельностью:

import authentication
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

#...

def docxDriveUpload(service):

    file_metadata = {'name': 'demo.docx'}
    media = MediaFileUpload('demo.docx', mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document')

    file = service.files().create(body = file_metadata, media_body = media, fields = 'id').execute()

    print 'File upload successful! File ID: %s' % file.get('id')

Чтобы загрузить файл в определенную папку на диске, вам необходимо использовать уникальный идентификатор папки в запросе на загрузку. Вы можете получить это, посетив drive.google.com, открыв папку в представлении браузера и скопировав строку после / folder / в URL. https://drive.google.com/drive/u/0/folders/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

...