2016-06-30 117 views
-2

我正在使用Python將單詞文件轉換爲文本字符串。生成的文本字符串將Bullet點(在Word文件中)轉換爲(以轉換後的字符串形式)。我如何使用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

對不起。爲了閱讀我使用的word文件:docx。 –

+0

@Kristof我添加了代碼。 –

回答

3

您嘗試不嘗試刪除字符。您可以使用replace方法替換字符串中的字符,也可以通過用空字符串替換字符來刪除字符。

唯一的問題是在源代碼中正確表示0xF0B7,正確的方法取決於document.paragraphs是否包含正常字符串或unicode字符串(我建議使用python3來避免unicode問題)。我假設它們是unicode字符串,然後你會將代碼點表示爲`u「\ uF0B7」(如果它是普通字符串,那麼它將取決於編碼)。

除此之外,您的代碼有問題,因爲您構建text_string的方式可能不太理想。從片段構建字符串的另一種方法是將片段放入列表中,然後使用"".join(l)將它們結合起來。

把這個你相聚(假設document.paragraphs是unicode字符串):

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 S(因爲在python3所有字符串都是Unicode)的。還要注意,當你需要確保你有一個支持文檔中所有字符的編碼(這可能是你想要首先刪除項目符號的原因)。

+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 -*-指定您的源文件的編碼,而不是您的字符串的編碼。