使用python-docx提取docx文本时大小写混淆问题求助
用python-docx提取docx文本时大写字符变为小写的原因与解决办法
问题原因
你遇到的情况核心原因是:原文档里的“大写显示”并非字符本身是大写,而是通过Word的**字体格式(全部大写/小型大写)**实现的。python-docx的paragraph.text提取的是文档底层存储的原始文本,而非应用格式后的显示效果,所以会出现原显示大写、提取后变小写的情况。
比如你示例中的ПОРЯ́ДОК,在Word里大概率是选中Поря́док后设置了“全部大写”格式——底层文本仍然是Поря́док,但Word通过格式让它显示为大写,提取时自然拿到原始的大小写混合文本。
验证方法
打开原docx文档,选中那个显示为大写的文本,右键选择「字体」,查看「效果」区域是否勾选了「全部大写」或「小型大写字母」。如果是,就确认是这个问题。
解决办法
要提取符合显示效果的文本,需要遍历段落中的每个run(Word中一段文本可能由多个不同格式的片段组成),检查每个run的字体格式后再转换文本:
from docx import Document def get_display_text(doc): full_content = [] for paragraph in doc.paragraphs: para_content = [] for run in paragraph.runs: current_text = run.text # 处理全部大写格式 if run.font.all_caps: current_text = current_text.upper() # 若需要处理小型大写,可根据需求调整,俄语场景下一般直接转大写即可 para_content.append(current_text) full_content.append(''.join(para_content)) return '\n'.join(full_content) # 使用示例 doc = Document("你的文档路径.docx") display_text = get_display_text(doc) print(display_text)
如果原文档中是手动输入的大写字符,paragraph.text会直接提取到大写,不需要额外处理。
内容的提问来源于stack exchange,提问作者Eugen
相关产品推荐
相关产品推荐

