2011-12-27 102 views
1

我想將word文檔轉換爲文本。所以我使用了一個腳本。在Python中解析Word文檔

import win32com.client 

app = win32com.client.Dispatch('Word.Application') 
doc = app.Documents.Open(r'C:\Users\SBYSMR10\Desktop\New folder (2)\GENERAL DATA.doc') 
content=doc.Content.Text 
app.Quit() 
print content 

我有folllowing結果:

enter image description here

現在我想這個文本轉換成其中包含了所有項目的列表。我用

content = " ".join(content.replace(u"\xa0", " ").strip().split()) 

編輯

當我這樣做,我得到:

enter image description here

它不是一個列表。問題是什麼?那個大點的字符是什麼?

+3

什麼不起作用?你得到了什麼? – 2011-12-27 08:08:55

+1

「它沒有工作」是什麼意思? – eumiro 2011-12-27 08:09:01

回答

9

Word文檔不是文本,它們是文檔:它們具有控制信息(如格式)和文本。如果你忽略了控制信息,那麼文本就沒用了。

所以,你必須深入到細節如何導航文檔的控制結構來發現你感興趣的文章,然後獲取結構的文本內容。

注意:您會發現Word非常複雜。如果可以,請考慮以下兩種方法:

  • 將Word文檔保存爲Word中的HTML。它會丟失一些格式,但列表將保持不變。與Word相比,HTML解析和理解要簡單得多。

  • 將文檔另存爲OOXML(至少自辦公室10後存在,擴展名爲.docx)。這是內部的XML文檔的ZIP檔案。 XML比完整的Word文檔更易於解析/理解,但比HTML版本更難。

+0

如果我的數據全是單詞後面跟着一個已知的字符串,那麼我該如何獲取它呢? – Shansal 2011-12-27 08:47:38

+0

你的問題是列表項。 HTML中的示例:'

  • a
  • b
'。這是'ab'的文字。如果忽略文檔結構,您怎麼知道哪些字符屬於哪個項目? – 2011-12-27 08:54:14

+0

但在代碼結果中,我只能看到大點字符和文檔內的文字。所以,如果我可以將其轉換爲列表,我相信我可以做我想要的東西 – Shansal 2011-12-27 09:01:57

0

現在我想這個文本轉換成其中包含了所有項目的列表。我用

內容= 「」。加入(content.replace(U 「\ XA0」,「「).strip()。分裂())

它不是一個列表。問題是什麼?

.join方法always returns a string。它期望你傳遞一個列表,然後將該列表與給定的分隔符(在你的情況下爲「」)連接起來。

除此之外,Aaron Digulla說。

0

你可以只解析由線word文檔線。這是不優雅,它肯定是不漂亮,但它的工作原理。下面是類似的東西我在Python 3所做的一個片段。3.

import os 
directory='your/path/to/file/' 
file='yourword.doc' 
doc=open(directory+file,'r+b') 
for line in doc: 
    line2=str(line) 
    print(line2)) 

我用正則表達式來得到我需要的東西。但是這段代碼會讀取你的word文檔的每一行(格式化和全部)並將它轉換爲你可以處理的漂亮字符串。不知道這是否有幫助(這篇文章已經有幾年了),但至少它解析了word文檔。然後,這只是在寫入txt文件之前刪除不想要的字符串的問題。

+0

這真的對你有用嗎?看起來像是查看word文件的危險方式。它只是文本和格式? – 2017-10-05 08:34:14

+0

我相信我正在使用舊的.doc格式,而不是.docx(如問題所述),如果您使用的是格式,那麼格式將保存爲字符串,而文本則保存爲純文本格式。我不是100%肯定這會適用於更新的格式。但原則上它應該起作用。 – Ryan 2017-10-05 20:32:26