Почему isspace () возвращает false для строк из пустой библиотеки docx python? - PullRequest
0 голосов
/ 27 апреля 2020

Моя цель - извлечь строки из нумерованных / маркированных списков в нескольких документах Microsoft Word, а затем упорядочить эти строки в одну однострочную строку, где каждая строка упорядочена следующим образом: 1.string1 2.string2 3 .string3 et c. Я называю эти однострочные строки процедурой, состоящей из «шагов» 1., 2., 3. и т. Д. c.

Причина, по которой он должен быть в этом формате, заключается в том, что строки процедур помещаются в базу данных, база данных используется для создания выходных данных электронных таблиц Excel, в таблицах используется макрос форматирования, а строки процедур вопрос должен быть в этом формате, чтобы этот макрос работал правильно.

Нумерованные / маркированные списки в MSword имеют одинаковый формат, но некоторые используют числа, некоторые используют маркеры, а некоторые имеют дополнительные пробелы перед первой точкой или дополнительные пробелы после последней точки.

Следующий текст показывает три различных примера форматирования документов Word:

Абзац Ключевое слово 1: произвольный текст
1. Шаг 1
2. Шаг 2
3. Шаг 3
Ключевое слово абзаца 2: произвольный текст

Ключевое слово абзаца 3: произвольный текст
• Шаг 1
• Шаг 2
• Шаг 3

Ключевое слово абзаца 4 : произвольный текст

Абзац Ключевое слово 5: произвольный текст

  1. Шаг 1
  2. Шаг 2
  3. Шаг 3

Ключевое слово параграфа 6: произвольный текст

(По некоторым причинам первые два списка не имеют отступов при форматировании сообщения, но в моем текстовом документе все отступы одинаковы)

Когда нумерованный / маркированный список отформатирован с вами Если в строке нет лишних пробелов, мой код работает нормально, например, между «абзацем ключевое слово 1:» и «абзацем ключевое слово 2:».

Я пытался использовать isspace (), чтобы изолировать случаи, когда есть дополнительные пробелы, которые не являются частью списка, который я хочу включить в строки моей процедуры.

Вот мой код:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
def extractStrings(file):
    doc = file
    for i in range(len(doc.paragraphs)):
        str1 = doc.paragraphs[i].text
        if "Paragraph Keyword 1:" in str1:
            start1=i
        if "Paragraph Keyword 2:" in str1:
            finish1=i
        if "Paragraph Keyword 3:" in str1:
            start2=i
        if "Paragraph Keyword 4:" in str1:
            finish2=i
        if "Paragraph Keyword 5:" in str1:
            start3=i
        if "Paragraph Keyword 6:" in str1:
            finish3=i
    print("----------------------------")
    procedure1 = ""
    y=1
    for x in range(start1 + 1, finish1):
        temp = str((doc.paragraphs[x].text))
        print(temp)
        if not temp.isspace():
            if y > 1:
                procedure1 = (procedure1 + " " + str(y) + "." + temp)
            else:
                procedure1 = (procedure1 + str(y) + "." + temp)
            y=y+1
            print(procedure1)
    print("----------------------------")
    procedure2 = ""
    y=1
    for x in range(start2 + 1, finish2):
        temp = str((doc.paragraphs[x].text))
        print(temp)
        if not temp.isspace():
            if y > 1:
                procedure2 = (procedure2 + " " + str(y) + "." + temp)
            else:
                procedure2 = (procedure2 + str(y) + "." + temp)
            y=y+1
            print(procedure2)
    print("----------------------------")
    procedure3 = ""
    y=1
    for x in range(start3 + 1, finish3):
        temp = str((doc.paragraphs[x].text))
        print(temp)
        if not temp.isspace():
            if y > 1:
                procedure3 = (procedure3 + " " + str(y) + "." + temp)
            else:
                procedure3 = (procedure3 + str(y) + "." + temp)
            y=y+1
            print(procedure3)
    print("----------------------------")
    del doc
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import docx
doc1 = docx.Document("docx_isspace_experiment_042420.docx")
extractStrings(doc1)
del doc1

К сожалению, у меня нет возможности поместить вывод в этот пост, но проблема в том, что когда в слове есть пустая строка, сделайте c, isspace () возвращает false и число «x». присваивается пустое пространство, поэтому я получаю что-то вроде: 1. 2. Шаг 1 3. Шаг 2 4. Шаг 3 5. 6. (это последняя итерация печати (method3) из кода)

Проблема в том, что isspace () возвращает false, даже когда мой вывод консоли python показывает, что строка является пустой строкой.

Я неправильно использую isspace ()? Есть ли что-то в строке, которую я не обнаруживаю, что приводит к тому, что isspace () возвращает false? Есть ли лучший способ сделать это sh? 1047 *

1 Ответ

2 голосов
/ 27 апреля 2020

Используйте тест:

# --- for s a str value, like paragraph.text ---
if s.strip() == "":
    print("s is a blank line")

str.isspace() возвращает True, если строка содержит только пробел. Пустая строка не содержит ничего и поэтому не содержит пробелов.

...