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

Python读取Dropbox中Doc/Docx文件遇异常,求可行解决方案

解决远程Doc/Docx文件读取及表格提取问题

第一步:正确从Dropbox获取文件二进制内容

之前下载本地文件为空,核心是Dropbox API调用方式有误,需确保完整获取二进制流:

import dropbox
from io import BytesIO

dbx = dropbox.Dropbox("你的Dropbox API令牌")
remote_file_path = "/目标文件夹/文件.docx"
# 调用files_download获取元数据和响应对象
metadata, response = dbx.files_download(remote_file_path)
# 直接提取二进制内容,不要提前解码
docx_binary = response.content

# 可选:验证内容完整性,写入本地文件
with open("本地验证文件.docx", "wb") as f:
    f.write(docx_binary)

第二步:用python-docx读取文本和提取表格

获取到完整二进制内容后,直接用python-docx处理(无需存本地也可):

提取文本内容(保留段落格式)

from docx import Document

# 用BytesIO包装二进制内容,模拟本地文件对象
doc = Document(BytesIO(docx_binary))
paragraph_texts = [para.text for para in doc.paragraphs]
full_text = "\n".join(paragraph_texts)

提取表格并转为Pandas DataFrame

import pandas as pd

table_dfs = []
for table in doc.tables:
    # 逐行提取单元格内容
    table_rows = []
    for row in table.rows:
        row_content = [cell.text.strip() for cell in row.cells]
        table_rows.append(row_content)
    # 第一行作为表头,后续行作为数据
    df = pd.DataFrame(table_rows[1:], columns=table_rows[0])
    table_dfs.append(df)
# table_dfs中存储了所有表格的DataFrame对象

第三步:处理旧版.doc格式文件

如果涉及.doc格式(python-docx不支持),可通过系统自带Word组件处理:

Windows环境(用pywin32)

import win32com.client
import os

# 先写入临时文件
temp_doc_path = "temp.doc"
with open(temp_doc_path, "wb") as f:
    f.write(doc_binary)

word = win32com.client.Dispatch("Word.Application")
doc = word.Documents.Open(os.path.abspath(temp_doc_path))

# 读取文本
full_text = doc.Content.Text
# 提取表格
table_dfs = []
for table in doc.Tables:
    table_rows = []
    for row_idx in range(1, table.Rows.Count + 1):
        row_content = []
        for col_idx in range(1, table.Columns.Count + 1):
            row_content.append(table.Cell(row_idx, col_idx).Range.Text.strip())
        table_rows.append(row_content)
    df = pd.DataFrame(table_rows[1:], columns=table_rows[0])
    table_dfs.append(df)

doc.Close()
word.Quit()
os.remove(temp_doc_path)

MacOS环境(用appscript)

from appscript import app, k
import os

temp_doc_path = "temp.doc"
with open(temp_doc_path, "wb") as f:
    f.write(doc_binary)

word = app('Microsoft Word')
doc = word.open(os.path.abspath(temp_doc_path))

full_text = doc.text.get()
table_dfs = []
for table in doc.tables():
    table_rows = []
    for row in table.rows():
        row_content = [cell.text.get().strip() for cell in row.cells()]
        table_rows.append(row_content)
    df = pd.DataFrame(table_rows[1:], columns=table_rows[0])
    table_dfs.append(df)

doc.close()
os.remove(temp_doc_path)

关键注意事项

  • 永远不要直接对Doc/Docx二进制内容做字符串解码,这类文件是复合二进制格式,必须用专用库处理
  • 用Dropbox API获取文件时,务必使用files_download方法,不要尝试手动读取远程路径的"文本内容"

内容的提问来源于stack exchange,提问作者DP92_A_Yellow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:11