Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在.doc文件上循环以将其转换为.pdf(Python)_Python 2.7_Loops_Pdf Conversion_Comtypes - Fatal编程技术网

Python 2.7 在.doc文件上循环以将其转换为.pdf(Python)

Python 2.7 在.doc文件上循环以将其转换为.pdf(Python),python-2.7,loops,pdf-conversion,comtypes,Python 2.7,Loops,Pdf Conversion,Comtypes,我正在寻找一种在Python 2.7.x中将.doc文件转换为.pdf的解决方案。与.docx和pdf相比,在Python中处理.doc文件似乎不是那么简单。到目前为止,最适合我的解决方案似乎是可行的,尽管当我尝试扩展它以循环给定目录中的.doc文件时,我遇到了一个错误: _ctypes.COMError: (-2146823114, None, (u"Sorry, we couldn't find your file. Was it moved, renamed, or deleted

我正在寻找一种在Python 2.7.x中将.doc文件转换为.pdf的解决方案。与.docx和pdf相比,在Python中处理.doc文件似乎不是那么简单。到目前为止,最适合我的解决方案似乎是可行的,尽管当我尝试扩展它以循环给定目录中的.doc文件时,我遇到了一个错误:

_ctypes.COMError: (-2146823114, None, (u"Sorry, we couldn't find your file.     Was it moved, renamed, or deleted?\r (C:\\windows\\system32\\PrivateCourse_AR.doc)", u'Microsoft Word', u'wdmain11.chm', 24654, None))
代码如下:

import os
import comtypes.client

os.chdir('C:\Users\Domi\PycharmProjects\STStransl-auto\doc')
path = os.getcwd()
print path

input = os.listdir(path)
print input
print len(input)

wdFormatPDF = 17 #pdf

i=0

output = '.\doc2txt_{}'.format(i)

word = comtypes.client.CreateObject('Word.Application')
for file in input:
    if file.endswith('.doc'):
        print file
        doc = word.Documents.Open(file)
        doc.SaveAs(output, FileFormat=wdFormatPDF)
        i += 1
        doc.Close()
        word.Quit()

欢迎您提供任何关于代码的建议,或者如何在Python中高效地处理.doc文件,我们对此表示欢迎和赞赏。我正在开发一个自动化脚本来处理.docx和.pdf文件(合并、提取文本并将文本拆分为多个文件)。这些都没有问题。遗憾的是,我也有很多.doc文件。非常感谢

请注意,该错误提到了您的文件名,但在系统路径中

C:\\windows\\system32\\PrivateCourse\u AR.doc

这是因为您实际上并没有调用Word子进程,而是使用MSWord调用了一个更复杂的通信协议,显然,这里MSWord正在使用另一个当前目录运行。因此,在这种情况下传递相对文件路径失败(幸运的是,MSWord提供了未找到文件的绝对路径)

要解决此问题,只需执行以下操作:

word.Documents.Open(os.path.abspath(file))
使路径相对于脚本(位于正确目录中)为绝对路径

对于
save
部分,可能是相同的问题/修复:

doc.SaveAs(os.path.abspath(output), FileFormat=wdFormatPDF)

旁白:始终为windows文件路径使用原始前缀,您可能会对诸如
C:\temp
(制表符而不是
\t
,write
r“C:\temp”
)之类的路径感到惊讶,谢谢。很高兴看到这个问答被发现并且对其他人有用:)