#python #python-docx
Вопрос:
Я пытаюсь извлечь текст из абзацев.
Но есть абзац, содержащий два объекта(списка).
Как я могу взять только первый список?
print(doc.paragraphs[i].runs)
вывод(два списка):
[<docx.text.run.Run object at 0x000002A9AAD98E08>, <docx.text.run.Run object at 0x000002A9AAD98B88>, <docx.text.run.Run object at 0x000002A9AAD98648>, <docx.text.run.Run object at 0x000002A9AAD98088>, <docx.text.run.Run object at 0x000002A9AAD98548>, <docx.text.run.Run object at 0x000002A9AAD98A48>, <docx.text.run.Run object at 0x000002A9AAD98988>, <docx.text.run.Run object at 0x000002A9AAD98A88>, <docx.text.run.Run object at 0x000002A9AAD98048>, <docx.text.run.Run object at 0x000002A9AAD98708>, <docx.text.run.Run object at 0x000002A9AAD98BC8>, <docx.text.run.Run object at 0x000002A9AAD98188>, <docx.text.run.Run object at 0x000002A9AAD98B08>, <docx.text.run.Run object at 0x000002A9AAD98108>, <docx.text.run.Run object at 0x000002A9AAD986C8>, <docx.text.run.Run object at 0x000002A9AAD982C8>, <docx.text.run.Run object at 0x000002A9AAD981C8>, <docx.text.run.Run object at 0x000002A9AAD98948>, <docx.text.run.Run object at 0x000002A9AAD98288>, <docx.text.run.Run object at 0x000002A9AAD98248>, <docx.text.run.Run object at 0x000002A9AAD98808>, <docx.text.run.Run object at 0x000002A9AAD98208>, <docx.text.run.Run object at 0x000002A9AAD98DC8>, <docx.text.run.Run object at 0x000002A9AAD98608>, <docx.text.run.Run object at 0x000002A9AAD98688>, <docx.text.run.Run object at 0x000002A9AAD98148>, <docx.text.run.Run object at 0x000002A9AAD98C48>, <docx.text.run.Run object at 0x000002A9AAD98E48>, <docx.text.run.Run object at 0x000002A9AAD98A08>, <docx.text.run.Run object at 0x000002A9AAD98908>]
[<docx.text.run.Run object at 0x000002A9AADB4D88>, <docx.text.run.Run object at 0x000002A9AADB4CC8>, <docx.text.run.Run object at 0x000002A9AADB4BC8>, <docx.text.run.Run object at 0x000002A9AADB4D48>]
при использовании удара
print(doc.paragraphs[i].runs[0])
затем следует первый пункт обоих списков. Мне нужен один из этих двух списков.
<docx.text.run.Run object at 0x0000028F33B58E88>
<docx.text.run.Run object at 0x0000028F33B74C48>
при попытке использовать два значения:
a,b = doc.paragraphs[i].runs
затем появилась ошибка:
ValueError: too many values to unpack (expected 2)
Как я могу это сделать?
===Обновление===
Я нашел свою ошибку в коде! Это потому, что мое если-условие. Спасибо, что ответили на мой вопрос.
Комментарии:
1. что такое «я» и где оно инициализировано? пролейте некоторый свет на то, как вы получили входные данные.
doc.paragraphs[i].runs
2. @dhamodaran я думаю, что код находится в цикле for
3. Да, это то, что сказал @PyGamer0 !
4. @AsterLin показывает минимальный код, необходимый для воспроизведения этой ошибки, включая цикл(циклы) for. Не просите нас угадать, какой код вы использовали для получения этого результата; это пустая трата нашего времени. Например, если я попытаюсь бежать
print(doc.paragraphs[i].runs)
, я получуNameError: name 'doc' is not defined
.
Ответ №1:
a,b,*_ = doc.paragraphs[i].runs
a и b получают первые 2 списка, _ получает остальные.
Изменить: вот как получить первый список
a, *_ = doc.paragraphs[i].runs
Комментарии:
1. Привет, спасибо, что ответили. Но я хочу получить первый список, а не первые 2 значения из двух списков.
2. Привет, это то же самое. Теперь ситуация похожа на A= [1,2] [3,4], и если я возьму A[0], то результат будет 1,3. Однако то, что я хочу, это [1,2].
3. @AsterLin как это возможно? А = [[1,2],[3,4]], A[0] должен вернуть [1,2]?! Или это другая структура?
4. Я тоже не знаю, почему ?? Может быть, структура действительно отличается от любой другой? Надеюсь, кто-нибудь скажет мне, почему (грустно)
Ответ №2:
Вы можете попробовать ast, если это поможет
import ast
input = doc.paragraphs[i].runs
output = ast.literal_eval(input,ensure_ascii=False).encode('utf8')
Комментарии:
1. Здравствуйте, спасибо, что ответили. Однако возникает ошибка: ошибка значения: неправильный узел или строка: [<объект docx.text.run.Run в 0x0000018ECB433EC8>]