繁体   English   中英

python 中的 .doc 到 .docx 的转换

[英].doc to .docx conversion in python

我一直在尝试使用 python 和 win32com 客户端将多个文件从 .doc 保存到 .docx(这样我就可以使用 python docx 程序编辑它们)我运行下面的代码并得到一个“完成且没有错误并退出pycharm 中的 0" 代码。 这是我第一次涉足 Python。

运行它后,我得到 0 个错误,但文件仍然是 all.doc

from glob import glob
import re
import os
import win32com.client as win32
from win32com.client import constants

paths = glob('C:\test\*.doc', recursive=True)

def save_as_docx(path):
   
    word = win32.gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(path)
    doc.Activate ()
    
    
    new_file_abs = os.path.abspath(path)
    new_file_abs = re.sub(r'\.\w+$', '.docx', new_file_abs)
    
    
    word.ActiveDocument.SaveAs(
        new_file_abs, FileFormat=constants.wdFormatXMLDocument
    )
    doc.Close(False)

for path in paths:
    save_as_docx(path)

在此之后我得到

“进程以退出代码 0 完成”并且所有文件仍然是 C:\test 文件夹中的.doc。

您应该通过例如打印paths来稍微调试一下——您的 glob 模式是错误的: 'C:\test\*.doc'是一个包含C:的字符串,然后是制表符,然后是 rest。 您需要使用r aw 字符串来避免反斜杠解释:

paths = glob(r'C:\test\*.doc', recursive=True)

然后, recursive=True什么都不做,因为你没有使用双星:

paths = glob(r'C:\test\**.doc', recursive=True)

最后,用.docx替换扩展名最好使用适合该工作的工具,所以总而言之

from glob import glob
import os
import win32com.client as win32
from win32com.client import constants

def save_as_docx(path):
   
    word = win32.gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(path)
    doc.Activate ()
    
    new_file_abs = os.path.splitext(os.path.abspath(path))[0] + ".docx"
    
    word.ActiveDocument.SaveAs(
        new_file_abs, FileFormat=constants.wdFormatXMLDocument
    )
    doc.Close(False)

paths = glob(r'C:\test\**.doc', recursive=True)

for path in paths:
    save_as_docx(path)

应该更接近你所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM