Как я могу создать документ Word (.docx), если он не найден с использованием Python, и написать в нем?

Я предполагаю, что здесь есть несколько переменных, но давайте начнем с теста. Во-первых, вам не нужно «издеваться над этим», потому что вы запускаете тест Jasmine через Karma, который загружает какую-то форму браузера. Надеюсь, вы используете PhantomJS вместо чего-то вроде Chrome.

Но давайте начнем с PhantomJS. Код для вашего теста должен выглядеть примерно так:

it ('should download something', function() {
  scope.download(1);
  expect(window.location).toBeDefined();
  expect(window.location).toBe('some static URL that it should be');
});

Однако вам нужно исправить инициализацию для вашего контроллера. Вы должны убедиться, что вы можете удовлетворить эту строку:

var href = window.location.href.split('/');

Это означает, что при создании вашего контроллера здесь:

ProcedureController = $controller('ProcedureController', {

вам понадобится чтобы установить window.location на что-то перед выполнением $controller, чтобы он правильно сгенерировал переменную url.

Теперь, если вы используете Chrome, вы, вероятно, увидите реальное движение в браузере. Я не думаю, что это вызовет проблемы, но это просто не обязательно. Лучше всего использовать PhantomJS, чтобы вы могли запускать те тесты в консоли.

-1
задан Mad Physicist 16 January 2019 в 08:42
поделиться

2 ответа

Похоже, я нашел ответ:

Важным моментом здесь было создание нового файла, если он не найден, или иное редактирование уже существующего файла. [112 ]

import os
from docx import Document 

#checking if file already present and creating it if not present
if not os.path.isfile(r"file_path"):

    #Creating a  blank document
    document = Document()

    #saving the blank document
    document.save('file_name.docx')

#------------editing the file_name.docx now------------------------

#opening the existing document
document = Document('file_name.docx')

#editing it
document.add_heading("hello world" , 0)

#saving document in the end
document.save('file_name.docx')

Дальнейшие изменения / предложения приветствуются.

0
ответ дан sudoCoder 16 January 2019 в 08:42
поделиться

Вероятно, самый безопасный способ открыть (и обрезать) новый файл для записи - использовать режим 'xb' . 'x' вызовет FileExistsError , если файл уже существует. 'b' необходим, потому что текстовый документ по сути является двоичным файлом: это zip-архив с XML и другими файлами внутри него. Вы не можете сжимать и распаковывать zip-файлы, если конвертируете байты с помощью кодировки символов.

Document.save принимает потоки, поэтому вы можете передать файл, открытый таким образом, чтобы сохранить ваш документ.

Ваш рабочий процесс может выглядеть примерно так:

doc = docx.Document(...)
...
# Make your document
...
with open('outfile.docx', 'xb') as f:
    doc.save(f)

Хорошая идея - использовать блоки with вместо raw open, чтобы обеспечить правильное закрытие файла даже в случае ошибка.

Точно так же, как вы не можете просто записать файл Word напрямую, вы также не можете добавить его. Способ «добавить» - открыть файл, загрузить объект Document , а затем записать его обратно, переписав исходный контент. Поскольку файл word представляет собой zip-архив, весьма вероятно, что добавленный текст даже не будет находиться в конце файла XML, в котором он находится, а тем более всего файла docx:

doc = docx.Document('file_to_append.docx')
...
# Modify the contents of doc
...
doc.save('file_to_append.docx')

Имейте в виду, библиотека python-docx может не поддерживать загрузку некоторых элементов, что может привести к окончательному удалению при сохранении файла таким образом.

0
ответ дан Mad Physicist 16 January 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: