Python 3.x python pptx无法从某些Powerpoint演示文稿中提取文本,但其他演示文稿可以正常工作

Python 3.x python pptx无法从某些Powerpoint演示文稿中提取文本,但其他演示文稿可以正常工作,python-3.x,file-io,powerpoint,python-pptx,Python 3.x,File Io,Powerpoint,Python Pptx,试图从.pptx文件的大目录中提取文本字段,以下脚本非常适合某些Powerpoint演示文稿: from pptx import Presentation import glob f = open("Scraped PPTX Data.txt", "a", encoding='utf-8') for eachfile in glob.glob("*.pptx"): prs = Presentation(eachfile) for slide in prs.slides:

试图从.pptx文件的大目录中提取文本字段,以下脚本非常适合某些Powerpoint演示文稿:

from pptx import Presentation
import glob

f = open("Scraped PPTX Data.txt", "a", encoding='utf-8')
for eachfile in glob.glob("*.pptx"):
    prs = Presentation(eachfile)
    for slide in prs.slides:
        for shape in slide.shapes:
            if hasattr(shape, "text"):
                f.write(shape.text)

f.close()
然而,在许多其他的问题上,尤其是在非常大的问题上,我收到了这堵巨大的错误之墙:

  File "C:\Users\GLD-POS3\Desktop\SIGNS\PPT_Scraper.py", line 9, in <module>
    prs = Presentation(eachfile)
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\api.py", line 28, in Presentation
    presentation_part = Package.open(pptx).main_document_part
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\package.py", line 125, in open
    pkg_reader = PackageReader.from_file(pkg_file)
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\pkgreader.py", line 37, in from_file
    phys_reader, pkg_srels, content_types
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\pkgreader.py", line 70, in _load_serialized_parts
    for partname, blob, srels in part_walker:
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\pkgreader.py", line 106, in _walk_phys_parts
    phys_reader, part_srels, visited_partnames
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\pkgreader.py", line 106, in _walk_phys_parts
    phys_reader, part_srels, visited_partnames
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\pkgreader.py", line 103, in _walk_phys_parts
    blob = phys_reader.blob_for(partname)
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\opc\phys_pkg.py", line 111, in blob_for
    return self._zipf.read(pack_uri.membername)
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\zipfile.py", line 1432, in read
    return fp.read()
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\zipfile.py", line 885, in read
    buf += self._read1(self.MAX_N)
  File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\zipfile.py", line 989, in _read1
    self._update_crc(data)
      File "C:\Users\GLD-POS3\AppData\Local\Programs\Python\Python37-32\lib\zipfile.py", line 917, in  _update_crc
raise BadZipFile("Bad CRC-32 for file %r" % self.name)
zipfile.BadZipFile: Bad CRC-32 for file 'ppt/media/image170.jpeg'

当您看到Python异常时,通常应该首先检查结束。 在这种情况下,它说:

文件“ppt/media/image170.jpeg”的CRC-32错误

这里要知道的是,pptx文件基本上只是一个具有奇特名称的zip文件

尝试运行python-m zipfile-l filename.pptx 它应该列出pptx文件的内容。 通常,pptx文件包含一组xml文件、一组图像和其他媒体文件

从错误消息中,您可以看到为image170.jpeg计算的校验和CRC=与zipfile中存储的值不匹配

目前,没有办法告诉ZipFile忽略CRC错误

问题是,在提取文本时,您可能只需要读取zip文件中ppt/slides/slideN.XML文件夹中的XML文件。您根本不需要访问这些图像


尝试使用zipfile.zipfile打开无效文件,并手动从ppt/slides中的XML文件中提取文本。

尝试使用python pptx打开该文件,查看是否出现相同错误。我打赌你会的。听起来像是一个损坏的.pptx文件。检查是否使用PowerPoint打开或修复该文件,并查看是否无法修复该文件。使用python pptx打开了其中一个pptx,并且该文件是允许的。有些pptx看起来确实已损坏,但我刚刚收到了与确认未损坏的pptx相同的错误。那么这意味着我的PowerPoints有什么问题呢?我有数百个这样的函数,需要从中提取数据。@ITboi49要么这样,要么Python计算CRC的方式有问题。