我一直在尝试使用 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。
paths您应该通过打印\xe2\x80\x93来调试一些东西,您的全局模式是错误的:'C:\\test\\*.doc'是一个包含 的字符串C:,然后是制表符,然后是其余的。您需要使用raw 字符串来避免反斜杠解释:
paths = glob(r'C:\\test\\*.doc', recursive=True)\nRun Code Online (Sandbox Code Playgroud)\n然后,recursive=True由于您没有使用双星,因此不执行任何操作:
paths = glob(r'C:\\test\\**.doc', recursive=True)\nRun Code Online (Sandbox Code Playgroud)\n最后,用适合该工作的工具更好地替换扩展.docx,所以总而言之
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)\nRun Code Online (Sandbox Code Playgroud)\n应该更接近你所需要的。
\n| 归档时间: |
|
| 查看次数: |
3286 次 |
| 最近记录: |