【问题标题】:How can i upload an .docx file to my GoogleDrive with Python?如何使用 Python 将 .docx 文件上传到我的 Google Drive?
【发布时间】:2019-10-20 17:13:14
【问题描述】:

我编写了一个简单的脚本来将 .docx 文件上传到我的 GoogleDrive 帐户。它完美地工作,除了文件..身份验证工作,上传文件工作。我在编码时遇到了一些问题,但现在使用 Latin-1 我可以上传文件而不会出现任何错误。但是上传之后,只有一个Untitled Document,里面有这个内容:

[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 PnQ 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 文件实际上是 zipfiles,这是真的吗?

还有一个问题: 如何将文件上传到特定的 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!')

【问题讨论】:

  • “我在编码时遇到了一些问题,但现在使用 Latin-1 我可以上传文件而没有任何错误” - 不是真的,看看你的结果。在上传之前打印file.read() 以查看您真正发送的内容。另外,您发布的代码已经破坏了缩进,发布代码中的file.readwith之外。
  • 另外,您是否尝试过任何其他文件,例如简单的文本文件?可能 SetContentString 实际上只是设置 text 文件的内容,而文件的类型在其他地方设置。
  • 不要看格式请 :D 我只是没有正确复制代码。但你是对的,file.read() 是无。我用一个简单的txt文件试了一下。它也作为无标题上传,但内容是正确的
  • 所以 SetContentString 也不适用于 txt 文件
  • 哦,对不起,如果你这样做file.read(),你需要保存它的内容,因为它可以通过文件两次。我的错。 |但是:正如我所说,它设置文件 content 并且谷歌驱动器不查看扩展名。您需要了解如何设置文件类型。

标签: python file-upload scripting google-drive-api


【解决方案1】:

通过使用Google Drive API Documentation 中提供的 Python 快速入门代码,您可以通过在请求中指定文件的 MIME 类型来将文件上传到 Google Drive,而不是依赖 None 中指定的默认值 @987654322 @。

The MIME Type for .docx filesapplication/vnd.openxmlformats-officedocument.wordprocessingml.document,所以可以这样设置。使用以下代码,我能够将 .docx 文件上传到我的 Google Drive,而没有任何编码或可读性问题:

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

要将文件上传到云端硬盘中的特定文件夹,您需要在上传查询中使用唯一的文件夹 ID。您可以通过访问drive.google.com,在浏览器视图中打开文件夹并复制 URL 中 /folders/ 之后的字符串来获取此信息。 https://drive.google.com/drive/u/0/folders/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

【讨论】:

  • 感谢您的帮助!您的函数中的“服务”属性到底是什么?
  • service 是与 API 服务的内置连接,在本例中为 Drive REST API。查看快速入门文档以获取示例代码以验证和使用服务developers.google.com/drive/api/v3/quickstart/python
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多