Моя цель - извлечь строки из нумерованных / маркированных списков в нескольких документах 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
- Шаг 2
- Шаг 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 *