2016-06-30 2 views
-2

저는 파이썬을 사용하여 단어 파일을 텍스트 문자열로 변환 중입니다. 결과 텍스트 문자열에는 단어 파일의 불릿 점이  (변환 된 문자열)로 변환됩니다. 파이썬을 사용하여 텍스트 문자열에서 이것을 어떻게 제거 할 수 있습니까? 그래서이 상자 ()가없는 텍스트 문자열 만 있습니다. 텍스트에서 제거하기

 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

귀하의 시도가 문자를 제거하지 않습니다

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 

출력은 같다. replace 메서드를 사용하여 문자열의 문자를 대체 할 수 있으며, 빈 문자열로 대체하여 문자를 제거하는 데에도 사용할 수 있습니다.

유일한 문제는 소스 코드에서 0xF0B7을 올바르게 나타내야하고 적절한 방법은 document.paragraphs에 일반 문자열이나 유니 코드 문자열이 있는지 여부에 따라 다릅니다 (유니 코드 문제를 피하기 위해 python3을 사용하는 것이 좋습니다). 나는 그들이 유니 코드 문자열이라고 가정하고 코드 포인트를`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) 

당신이 문자열 전에 u의를 제거해야 python3 당신이 사용하는 경우 (python3에서 이후의 모든 문자열이 유니 코드이다). 또한 print을 입력 할 때 문서의 모든 문자를 지원하는 인코딩이 있어야합니다 (첫 번째 위치에서 글 머리 기호를 제거하려는 이유 일 수 있음). 당신 만이 할 수있는 영어 문자를 원하는 경우

+1

생성자 표현식 대신에'join'을 사용하여리스트 이해력을 사용하십시오. 이것은'join'이리스트를 두 번 반복하기 때문에, 두 번째 반복을 위해 다시 생성되어야하는 생성기 대신 목록을 갖는 것이 더 빠릅니다. [Raymond Hettinger의 대답] (http://stackoverflow.com/a/9061024/4099593)을 참조하십시오. –

+0

@BhargavRao 전 그 사실을 몰랐습니다. 지적 해 주셔서 고맙습니다. 나는 대답을 업데이트했습니다. – skyking

+0

Bhargav Rao의 설명을 분명히 해두십시오. 생성기 표현식은 두 번째 결과가 다를 수 있으므로 두 번 실행되지 않습니다. 대신에 .join은 gen exp의 결과를리스트에 저장합니다. Martijn은 연결된 "중복 가능성"질문에 대한 답변에서이 점을 언급합니다. –

0

는 :

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

나는 최선의 해결책이 문제와 replace을 일으키는 바이트를 정확하게 파악하는 것입니다 생각합니다.

# -*- coding: utf-8 -*-은 문자열이 아닌 소스 파일의 인코딩을 지정합니다.