You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将通过Google Drive API的files.get_media()获取的docx文件字节流转换为文本?

如何将通过Google Drive API的files.get_media()获取的docx文件字节流转换为文本?

我太懂你这种折腾半天卡壳的感觉了!花了好几周就为了把Google Drive里的docx文件转成纯文本,好不容易用API拿到了字节流,结果解码报错、转不出来,确实够闹心的。

首先得给你说清楚为啥直接解码不行:docx文件本质上是压缩的XML格式包,不是纯文本文件,里面有大量非文本的二进制数据,直接用decode()去转肯定会报“无效续字节”这种错误,哪怕忽略错误也拿不到有用的内容。

解决办法其实很简单,用专门处理docx文件的Python库python-docx就行,下面是修改后的完整代码,你可以直接用:

from docx import Document
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
import io

# 你的原有代码部分,获取字节流
service = build("drive", "v3", credentials=creds)
file_id = real_file_id
request = service.files().get_media(fileId=file_id)
        
file = io.BytesIO()
downloader = MediaIoBaseDownload(file, request)
done = False
while done is False:
    status, done = downloader.next_chunk()
    print(f"Download {int(status.progress() * 100)}%.")

# 关键的转文本步骤
file.seek(0)  # 把字节流的指针移到开头,因为下载完成后指针在末尾
doc = Document(file)
full_text = []
for para in doc.paragraphs:
    full_text.append(para.text)
docx_text = '\n'.join(full_text)

print(docx_text)  # 这就是你要的纯文本内容了

给你拆解下关键步骤:

  • 下载完成后,必须调用file.seek(0)把BytesIO的文件指针移到开头,不然Document()读取的时候会从空的末尾开始读,拿不到内容。
  • docx.Document()可以直接读取BytesIO里的docx二进制内容,不用先存成本地文件。
  • 遍历doc.paragraphs就能拿到每一段的文本,最后拼接成完整的字符串就行。

如果你的docx里还有表格、图片这些内容,python-docx也能处理,比如提取表格内容可以遍历doc.tables,不过如果只是要普通段落文本,上面的代码就足够了。

备注:内容来源于stack exchange,提问作者wafflehouse67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:18:03