Python повреждение файлов pptx - PullRequest
0 голосов
/ 10 июля 2020

Я разархивировал файл pptx в структуру папок xml файлов, переименовав его в .zip. Затем я отредактировал некоторые данные (без структурных изменений, только некоторые незначительные изменения данных и некоторые изменения данных диаграмм / таблиц). Затем, когда я повторно заархивировал файл и переименовал его в .pptx, он сказал, что файл был поврежден. Я использую linux и редактирую файлы с помощью:

  • xml файлов: from l xml import etree as ET
  • xlsx: import openpyxl

Любая помощь будет оценена. Заранее благодарим.

Изменить: найдите фрагменты кода ниже Фрагмент 1 Фрагмент 2

Редактировать 2: Даже если я ничего не меняю в файл, просто откройте его, прочтите и распечатайте материал, тогда я также не могу преобразовать его обратно в pptx

Изменить 3: def getStringFromFile (filename):

wordsFromTheFIle = []
tree = ET.parse(filename)
root = tree.getroot()
ns = {'a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
      'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
      'p': 'http://schemas.openxmlformats.org/presentationml/2006/main'}

subroot= root.find('p:cSld', ns)
sptree = subroot.find('p:spTree', ns)
for sp in sptree.findall('p:sp', ns):
    txBody = sp.find('p:txBody', ns)
    for p in txBody.findall('a:p', ns):
        for r in p.findall('a:r',ns):
            for t in r.findall('a:t',ns):
                word = t.text
                if(word!=None):
                    wordsFromTheFIle.append(word)
                    

print(wordsFromTheFIle)

И прочитать файлы в этом формате:

filenames = glob("Path to files")
for filename in filenames:
     print(filename)
     getStringFromFile(filename)

Редактировать 4:

with zipfile.ZipFile("/path-to-pptx/_MyPresentation.pptx", 'r') as zip_ref:
zip_ref.extractall("path-to-extract-folder")
zip_ref.close()

zip_file = zipfile.ZipFile('another.pptx', 'w')
zip_file.write('_MyPresentation')
zip_file.close()

Даже это похоже на повреждение файлов на моей машине

...