解決python大批量讀寫.doc檔案的問題

來源:互聯網
上載者:User
這篇文章主要介紹了關於解決python大批量讀寫.doc檔案的問題,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

前言:

java語言讀寫.doc的出現亂碼問題:

大家都知道當我們利用java語言讀寫.doc檔案時,無論是利用流的方式將.doc檔案的內容輸出到控制台(console),還是將其寫到其他檔案中,無論你採取何種編碼格式(utf-8,gbk等)輸出,你看到的內容99%都是亂碼。

java語言讀寫.doc的出現亂碼問題原因分析:

.doc檔案是微軟開發的用於辦公的編輯文字的軟體之一,如果說一篇word文檔的字型格式採用的是utf-8,那麼你採用utf-8格式讀寫該文檔,應該能夠正確輸出漢字,但是一旦你的word文檔裡面的字型的尺寸改變,字型加上顏色屬性,字型加上某種style時,那麼本篇word文檔的格式就變了,而不再是utf-8,因此採用utf-8格式輸出99%都是亂碼。

利用java語言讀寫.doc文檔避免亂碼的解決方案:(sun公司pk微軟公司)

可以利用sun公司開發的poi包,該包提供修改微軟辦公軟體的介面,利用poi包讀寫.doc檔案,通常就不會產生亂碼。如果看到這裡你就大概認為,我終於可以利用java去處理.doc檔案了,那麼我想說的是,你開心的太早了。據我所知,截止到2017年12月22日,poi包的最新版本是3.1.7版,你也許對該版本沒有什麼概念,3.1.7版本的poi包只能處理微軟2007版本的word,excel,ppt等,也就是說poi3.1.7版本的jar包不支援處理咱們電腦上頂配的word2016,因此可以說你可以放棄使用java讀寫word2016了。但是你也可以嘗試用其他的介面去處理word,但是效率都不會比poi介面高,幸運的是,官網顯示poi最新版本將在2017年12月份推出,但是截止到2017年12月22日,我還沒有在官網看到此jar包。

本文:

python在處理文檔的語言處理方面比java更勝一籌,畢竟python結合Regex在自然語言處理方面還是很強勢的。最近在做深度學習的項目,需要解析並處理幾百個數量級的.doc檔案。眾所周知,python讀寫.txt文檔可以說一路暢通無阻,不管你中文是什麼格式;python在讀寫.docx文檔時,也比較暢通,最多你需要在命令列安裝python-docx (0.8.6),就可以讀寫.docx文檔了,具體讀寫方案,下述。

問題:python無法讀取.doc檔案(而不是.docx檔案)

解決方案:利用python將大批.doc檔案轉化為.docx檔案,再讀寫.docx檔案

問題分析:python利用python-docx (0.8.6)庫可以讀取.docx檔案或.txt檔案,且一路暢通無阻,而對.doc檔案本身python是無能為力的,那有很多同學就不服氣,我手動把.doc檔案的尾碼名改為.docx或.txt不就解決問題了嗎?答案是不能的,簡單修改尾碼名,那麼檔案就被你玩壞了,別說打不開,就是開啟也是天書啊(亂碼)。python無法操作.doc檔案是他的先天不足,但是我們不要鑽牛角尖一定要在互連網上找到一種源碼直接讀取.doc檔案,一調用就好了,但是不幸的是,你可能在網上也找不到解決方案。正當我一籌莫展之時,我將.doc文檔利用手動的方式“另存新檔”.docx文檔,就能夠成功開啟轉化後的.docx文檔,於是我就嘗試利用代碼方式完成這個手動的“另存新檔”功能,問題得以解決。

直接上python代碼(首先你需要先安裝pypewin32庫):

# -*- coding: utf-8 -*-:import sysimport pickleimport reimport codecsimport stringimport shutilfrom win32com import client as wc

def doSaveAas(): # 想批次檔,你就用for迴圈唄,我一次性處理了100多個檔案,代碼執行不超過2分鐘,可以解決問題,目標檔案路徑可以自由改動,大家注意SaveAs方法中的參數,好多啊,別寫錯了

word = wc.Dispatch('Word.Application')doc = word.Documents.Open(u'C:\\Users\\X\\PycharmProjects\\1\\大家好.doc')  # 目標路徑下的檔案doc.SaveAs(u'C:\\Users\\X\\PycharmProjects\\1\\我是一枚小小的程式員X007.docx', 12, False, "", True, "", False, False, False, False) # 轉化後路徑下的檔案 doc.Close()word.Quit()

轉化為.docx檔案後,在處理.docx檔案,一路暢通無阻,網上很多解決方案,這裡我就不詳細說了,有問題,可以給我留言喲

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.