python 中的 .doc 到 .docx 转换

0 python python-docx

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

运行后出现 0 个错误,但文档仍然都是 .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)
Run Code Online (Sandbox Code Playgroud)

之后我得到

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

AKX*_*AKX 6

paths您应该通过打印\xe2\x80\x93来调试一些东西,您的全局模式是错误的:'C:\\test\\*.doc'是一个包含 的字符串C:,然后是制表符,然后是其余的。您需要使用raw 字符串来避免反斜杠解释:

\n
paths = glob(r'C:\\test\\*.doc', recursive=True)\n
Run Code Online (Sandbox Code Playgroud)\n

然后,recursive=True由于您没有使用双星,因此不执行任何操作:

\n
paths = glob(r'C:\\test\\**.doc', recursive=True)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
from glob import glob\nimport os\nimport win32com.client as win32\nfrom win32com.client import constants\n\ndef save_as_docx(path):\n   \n    word = win32.gencache.EnsureDispatch('Word.Application')\n    doc = word.Documents.Open(path)\n    doc.Activate ()\n    \n    new_file_abs = os.path.splitext(os.path.abspath(path))[0] + ".docx"\n    \n    word.ActiveDocument.SaveAs(\n        new_file_abs, FileFormat=constants.wdFormatXMLDocument\n    )\n    doc.Close(False)\n\npaths = glob(r'C:\\test\\**.doc', recursive=True)\n\nfor path in paths:\n    save_as_docx(path)\n
Run Code Online (Sandbox Code Playgroud)\n

应该更接近你所需要的。

\n