2016-06-30 2 views
-2

Я преобразовываю файл слова в текстовую строку, используя Python. Полученная текстовая строка содержит точки Bullet (в текстовом файле), преобразованные в  (в преобразованной строке). Как удалить это из текстовой строки с помощью Python, так что у меня есть только текстовая строка без этих полей ().Удаление  из текста

from docx import Document 

document = Document(file_to_read) 

text_string = '' 
for paragraph in document.paragraphs: 
    text_string += paragraph.text+"\n"# -*- coding: utf-8 -*- 

print text_string 

Выход как:

 Computer Science fundamentals in data structures. 

 Computer Science fundamentals in algorithm design, problem solving, and complexity analysis 
+0

Какой инструмент вы используете? Openpyxl предназначен для Excel. –

+0

Извините. Для чтения текстового файла я использую: docx. –

+0

@ Kristof Я добавил код. –

ответ

3

Попытка не пытается удалить символы. Вы можете использовать метод replace для замены символов в строке, его также можно использовать для удаления символов, просто заменив пустую строку.

Единственная проблема заключается в том, чтобы правильно представлять 0xF0B7 в исходном коде, и правильный способ зависит от того, содержит ли document.paragraphs обычные строки или строки Unicode (я бы рекомендовал использовать python3, чтобы избежать проблем с Unicode). Я предполагаю, что они являются строками unicode, а затем вы будете представлять точку кода как «u» \ uF0B7 »(если это обычные строки, то это будет зависеть от кодировки).

Помимо этого у вашего кода возникла проблема, так как способ построения text_string может быть неоптимальным. Другой способ построения строки из фрагментов - разместить фрагменты в списке, а затем присоединиться к ним, используя "".join(l).

Сведя вместе вы получите (при условии, что document.paragraphs Юникода строки):

from docx import Document 

document = Document(file_to_read) 

text_string = u"\n".join([p.replace(u"\uF0B7", u"") 
          for p in document.paragraphs]) 

print(text_string) 

Если вы используете python3 вы должны удалить u сек до струн (так как в Python3 все строки Юникода). Также обратите внимание, что при print IN вы должны убедиться, что у вас есть кодировка, которая поддерживает все символы в документе (это, возможно, было причиной того, что вы хотите удалить маркеры в первую очередь).

+1

Используйте понимание списка с помощью 'join' вместо выражения генератора. Это происходит из-за того, что 'join' выполняет итерацию по списку дважды, поэтому вместо генератора быстрее будет иметь список, который должен быть заново создан для второй итерации. См. Ответ Раймонда Хеттингера (http://stackoverflow.com/a/9061024/4099593). –

+0

@BhargavRao Я этого раньше не знал. Спасибо за указание на это, я обновил свой ответ. – skyking

+0

Просто уточняя комментарий Бхаргава Рао: выражение генератора не запускается дважды, так как второе может дать разные результаты. Вместо этого '.join' сохраняет выход gen exp в список; Мартин упоминает об этом в своем ответе на связанный «возможный дублирующий» вопрос. –

0

если вы хотите только английские символы, это может сделать:

text_string = text_string.decode('ascii', errors='ignore')

Я думаю, что лучшим решением было бы точно определить, какой байт вызывает проблемы и replace его.

Этот # -*- coding: utf-8 -*- определяет кодировку исходного файла, а не строку.

Смежные вопросы