亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解

 更新時(shí)間:2023年03月29日 08:25:27   作者:王中陽(yáng)Go  
在開(kāi)發(fā)過(guò)程中,我們常常需要處理壓縮包和文檔文件。本文將介紹如何使用Go語(yǔ)言自動(dòng)解壓縮包和讀取docx/doc文件,需要的可以參考一下

一、解壓縮包

壓縮包格式

常見(jiàn)的壓縮包格式有zip、gzip、bzip2等。在Go語(yǔ)言中,使用archive/zip、compress/gzip、compress/bzip2包可以輕松地處理這些格式的文件。

解壓zip文件

使用archive/zip包中的函數(shù),我們可以輕松地操作zip文件。首先,我們需要打開(kāi)zip文件:

zipFile, err := zip.OpenReader(zipPath)
if err != nil {
    return err
}
defer zipFile.Close()

上面的代碼使用zip.OpenReader函數(shù)打開(kāi)一個(gè)zip文件,并返回一個(gè)*zip.ReadCloser類型的對(duì)象,表示zip文件內(nèi)容的讀取器和關(guān)閉器。注意:在讀取完zip文件后,記得使用defer語(yǔ)句關(guān)閉該文件。

接著,我們可以使用Read()函數(shù)來(lái)解壓zip文件中的每一個(gè)文件,并將其寫(xiě)入到本地磁盤(pán):

for _, zipFileInfo := range zipFile.Reader.File {
    dstPath := filepath.Join(outputDir, zipFileInfo.Name)
    dstDir := filepath.Dir(dstPath)
    err = os.MkdirAll(dstDir, 0755)
    if err != nil {
        return err
    }

    dstFile, err := os.OpenFile(dstPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, zipFileInfo.Mode())
    if err != nil {
        return err
    }

    srcFile, err := zipFileInfo.Open()
    if err != nil {
        dstFile.Close()
        return err
    }

    _, err = io.Copy(dstFile, srcFile)
    dstFile.Close()
    srcFile.Close()

    if err != nil {
        return err
    }
}

上面的代碼中,我們首先拼接出本地文件路徑,并創(chuàng)建其所在的目錄結(jié)構(gòu)。接著,使用os.OpenFile()函數(shù)以寫(xiě)入模式打開(kāi)本地文件,并使用zipFileInfo.Mode()函數(shù)獲取zip文件中該文件的權(quán)限信息。使用zipFileInfo.Open()函數(shù)將zip文件中的文件打開(kāi),并使用io.Copy()函數(shù)將其寫(xiě)入到本地文件中。如果出現(xiàn)任何錯(cuò)誤,記得關(guān)閉本地文件和zip文件中的文件,以便資源得以正確釋放。

解壓gzip文件

使用compress/gzip包,我們也可以輕松地解壓gzip文件。具體方法如下:

gzipFile, err := os.Open(gzipPath)
if err != nil {
    return err
}
defer gzipFile.Close()

gzipReader, err := gzip.NewReader(gzipFile)
if err != nil {
    return err
}
defer gzipReader.Close()

dstPath := filepath.Join(outputDir, filepath.Base(gzipPath))
dstFile, err := os.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {
    return err
}
defer dstFile.Close()

_, err = io.Copy(dstFile, gzipReader)
if err != nil {
    return err
}

上面的代碼首先打開(kāi)gzip文件,并使用gzip.NewReader()函數(shù)創(chuàng)建一個(gè)gzip.Reader類型的對(duì)象,表示gzip文件內(nèi)容的讀取器。記得在讀取完該文件之后關(guān)閉相關(guān)文件(即:gzip文件和讀取器文件)。然后,通過(guò)使用os.OpenFile()函數(shù)以寫(xiě)入模式打開(kāi)目標(biāo)文件,并將gzip讀取器中的內(nèi)容復(fù)制到目標(biāo)文件中即可。記得在操作完目標(biāo)文件后關(guān)閉相關(guān)文件,以便資源成功釋放。

解壓bzip2文件

使用compress/bzip2包,可以輕松地解壓bzip2文件。方法如下:

bzip2File, err := os.Open(bzip2Path)
if err != nil {
    return err
}
defer bzip2File.Close()

bzip2Reader := bzip2.NewReader(bzip2File)

dstPath := filepath.Join(outputDir, filepath.Base(bzip2Path))
dstFile, err := os.OpenFile(dstPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {
    return err
}
defer dstFile.Close()

_, err = io.Copy(dstFile, bzip2Reader)
if err != nil {
    return err
}

上面的代碼中,我們使用bzip2.NewReader()函數(shù)創(chuàng)建一個(gè)bzip2.Reader類型的對(duì)象,表示bzip2文件內(nèi)容的讀取器。然后,以寫(xiě)入模式打開(kāi)目標(biāo)文件,將讀取器中的內(nèi)容復(fù)制到目標(biāo)文件中,并在完成后關(guān)閉相關(guān)文件,釋放資源。

二、讀取docx/doc文件

docx/doc文件是一種二進(jìn)制文件格式,我們可以使用第三方庫(kù)來(lái)讀取其中的內(nèi)容。Word文檔通常使用.doc或.docx格式保存,其中.doc是二進(jìn)制格式,而.docx則是XML格式的文件。接下來(lái),我們將分別介紹如何讀取這兩種文件格式的內(nèi)容。

讀取.doc格式文件

我們可以使用github.com/LopPay/office-parser/ole、github.com/LopPay/office-parser/common和github.com/LopPay/office-parser/msdoc分別來(lái)處理ole文件、解析doc文件和讀取doc文件中的數(shù)據(jù)。該庫(kù)已經(jīng)封裝了所有的文本、圖片、表格等元素的解析和轉(zhuǎn)換。

下面是一個(gè)簡(jiǎn)單的讀取doc文件的程序:

docFile, err := os.Open(docPath)
if err != nil {
    return err
}
defer docFile.Close()

docData, err := msdoc.ParseDocFile(docFile)
if err != nil {
    return err
}

for _, para := range docData.Paragraphs {
    for _, run := range para.Runs {
        fmt.Print(run.Text)
    }
    fmt.Println()
}

上面的代碼中,我們首先使用os.Open()函數(shù)打開(kāi)doc文件,并使用msdoc.ParseDocFile()函數(shù)解析該文件。該函數(shù)返回一個(gè)msdoc.Document類型的對(duì)象,該對(duì)象包括文本、圖片、表格等信息。下面的代碼將遍歷每一個(gè)段落和其中的Run實(shí)例,并將其內(nèi)容輸出到控制臺(tái)。

讀取.docx格式文件

我們可以使用第三方庫(kù)github.com/unidoc/unioffice來(lái)讀取.docx格式的文件。該庫(kù)支持讀取和寫(xiě)入單個(gè)文件、讀取和寫(xiě)入多個(gè)文件、轉(zhuǎn)換和操作表格、圖像、段落、樣式等操作。

下面是一個(gè)簡(jiǎn)單的讀取.docx文件的程序:

docFile, err := os.Open(docxPath)
if err != nil {
    return err
}
defer docFile.Close()

doc, err := document.Open(docFile)
if err != nil {
    return err
}

for _, para := range doc.Paragraphs() {
    for _, run := range para.Runs() {
        fmt.Print(run.Text())
    }
    fmt.Println()
}

上面的代碼中,我們首先使用os.Open()函數(shù)打開(kāi)docx文件,并使用document.Open()函數(shù)解析該文件。該函數(shù)返回一個(gè)document.Document類型的對(duì)象,該對(duì)象包括文本、圖片、表格等信息。下面的代碼將遍歷每一個(gè)段落和其中的Run實(shí)例,并將其內(nèi)容輸出到控制臺(tái)。

三、總結(jié)

本文介紹了如何使用Go語(yǔ)言自動(dòng)解壓縮包和讀取docx/doc文件。具體來(lái)說(shuō),我們使用了相應(yīng)的第三方庫(kù)和Go語(yǔ)言內(nèi)置庫(kù)中的代碼。

上述代碼運(yùn)行起來(lái)比較簡(jiǎn)單,適合初學(xué)者學(xué)習(xí)和實(shí)踐。希望對(duì)大家有幫助,大家可以自行根據(jù)需求進(jìn)行修改和擴(kuò)展。

到此這篇關(guān)于Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解的文章就介紹到這了,更多相關(guān)Go解壓縮包和讀取doc文件內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    fmt包實(shí)現(xiàn)了類似C語(yǔ)言printf和scanf的格式化I/O,主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分,本文就來(lái)介紹一下GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用,感興趣的可以了解下
    2023-10-10
  • 在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解

    在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解

    這篇文章主要介紹了在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)創(chuàng)建路由,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05
  • Go語(yǔ)言實(shí)現(xiàn)圖片快遞信息識(shí)別的簡(jiǎn)易方法

    Go語(yǔ)言實(shí)現(xiàn)圖片快遞信息識(shí)別的簡(jiǎn)易方法

    這篇文章主要為大家介紹了Go語(yǔ)言實(shí)現(xiàn)圖片快遞信息識(shí)別的簡(jiǎn)易方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 詳解Golang 推薦的命名規(guī)范

    詳解Golang 推薦的命名規(guī)范

    這篇文章主要介紹了詳解Golang 推薦的命名規(guī)范,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Golang import本地包和導(dǎo)入問(wèn)題相關(guān)詳解

    Golang import本地包和導(dǎo)入問(wèn)題相關(guān)詳解

    這篇文章主要介紹了Golang import本地包和導(dǎo)入問(wèn)題相關(guān)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Go設(shè)計(jì)模式之觀察者模式講解和代碼示例

    Go設(shè)計(jì)模式之觀察者模式講解和代碼示例

    觀察者是一種行為設(shè)計(jì)模式, 允許一個(gè)對(duì)象將其狀態(tài)的改變通知其他對(duì)象,觀察者模式提供了一種作用于任何實(shí)現(xiàn)了訂閱者接口的對(duì)象的機(jī)制, 可對(duì)其事件進(jìn)行訂閱和取消訂閱,本文就通過(guò)代碼示例給大家詳細(xì)介紹一下Go的觀察者模式,需要的朋友可以參考下
    2023-07-07
  • golang實(shí)現(xiàn)給圖片加水印

    golang實(shí)現(xiàn)給圖片加水印

    這篇文章主要為大家詳細(xì)介紹了Vue3如何利用golang實(shí)現(xiàn)給圖片加水印,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-12-12
  • Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù)

    Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù)

    這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù),Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫(kù)的技術(shù),跳過(guò)了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫(kù)的過(guò)程,提高了Golang項(xiàng)目開(kāi)發(fā)部署的靈活性
    2022-07-07
  • go run main.go 一直提示找不到包的解決方案

    go run main.go 一直提示找不到包的解決方案

    這篇文章主要介紹了go run main.go 一直提示找不到包的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論