人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python提取word文件中的所有圖片

發(fā)布日期:2022-06-16 14:11 | 文章來(lái)源:CSDN

辦公中,偶爾會(huì)碰到一種情況,需要提取word文檔中的圖片,決定寫這樣一款工具自動(dòng)提取圖片。
關(guān)于腳本的使用:
情景1:如果你拿到的是一個(gè)文件夾,所有的word文件都在這個(gè)文件夾的子目錄下,深度為1層,你可以直接使用該腳本
情景2:如果你拿到的是一個(gè)文件夾,打開之后,里面雜亂無(wú)章的充斥著各種文件,你也不確定word文檔都在哪,那么你需要使用Everything來(lái)手動(dòng)提取出所有的word文檔,雖然我也可以讓腳本實(shí)現(xiàn)這個(gè)功能,但是使用腳本需要考慮到有可能存在同名文件,再處理起來(lái)代碼量會(huì)更大,還是用Everything手動(dòng)移動(dòng)文件吧,誰(shuí)讓現(xiàn)在的代碼量已經(jīng)遠(yuǎn)超我預(yù)期了呢?
3:預(yù)處理前面的兩步之后,就可以直接運(yùn)行腳本了
4:腳本注釋很詳細(xì),這里不再贅述
5:目前僅支持docx格式的,主要原因是,如果支持doc的話,需要把doc轉(zhuǎn)為docx,轉(zhuǎn)換略慢,并且,我也用不到。如果你感興趣的話,我再最下面介紹了互轉(zhuǎn)的方法,你可以把這個(gè)函數(shù)加進(jìn)去即可

代碼

import zipfile
import os
import shutil
import hashlib
import send2trash
'''
假設(shè)所有的word文檔存放在某路徑中,這個(gè)路徑中包含各種雜七雜八的玩意
使用Everything,或者"篩選文件.py"把所有的docx文件移動(dòng)到C:\\Users\\asuka\\Desktop\\123
逐個(gè)解壓每個(gè)docx文檔,并提取圖片
強(qiáng)烈建議使用Everything用來(lái)篩選出所有的word文檔,這樣假如有兩個(gè)重名的文檔,可以手動(dòng)處理
如果編寫軟件來(lái)實(shí)現(xiàn)的話,會(huì)麻煩很多
'''

# 一個(gè)用來(lái)解壓文件的函數(shù)
def extract_zip(zip_path):
 os.chdir(os.path.dirname(zip_path))  # 需要進(jìn)入到這個(gè)路徑下,這樣解壓的文件,才在這個(gè)路徑下
 a = zipfile.ZipFile(zip_path)  # 調(diào)用zipfile.ZipFile()函數(shù),創(chuàng)建一個(gè)ZipFile對(duì)象
 a.extractall()
 a.close()
 os.chdir(path)  # 恢復(fù)到之前的路徑

# 用來(lái)獲取所有的圖片
'''
測(cè)試的時(shí)候發(fā)現(xiàn),不同word文件解壓之后,里面的圖片命名格式一致,
導(dǎo)致不能直接移動(dòng)圖片,否則會(huì)造成文件覆蓋,這里需要對(duì)找到的每一個(gè)文件,進(jìn)行重命名
'''

def get_picture(demo_path):
 count = 1  # 用來(lái)個(gè)圖片進(jìn)行重命名
 for current_folder, list_folders, files in os.walk(demo_path):
  for f in files:
if f.endswith('png') or f.endswith('jpg') or f.endswith('jpeg'):  # 設(shè)置圖片類型是這種
 move_f = current_folder + '\\' + f  # 給出要移動(dòng)的文件的路徑
 new_file_path = path1 + '\\' + str(count) + '.' + f.rpartition('.')[-1]  # 指定新文件的文件路徑,文件名數(shù)字遞增,文件后綴
 shutil.move(move_f, new_file_path)  # 移動(dòng)文件
 count += 1
 print('[-] 總共獲取圖片{}張'.format(count - 1))

# 對(duì)圖片去重
# 計(jì)算每個(gè)圖片的md5值,據(jù)此進(jìn)行去重,去重的文件會(huì)被刪除到回收站中
def only_one(test_path):
 md5_list = []
 count = 0
 for current_folder, list_folders, files in os.walk(test_path):
  for file in files:
picture_path = current_folder + '\\' + file  # 獲取每個(gè)圖片的路徑
f = open(picture_path, 'rb')  # 開始計(jì)算每個(gè)圖片的md5值
md5obj = hashlib.md5()
md5obj.update(f.read())
get_hash = md5obj.hexdigest()
f.close()
md5_value = str(get_hash).upper()
# 開始去重
if md5_value in md5_list:
 send2trash.send2trash(picture_path)  # 如果這個(gè)文件的md5值曾經(jīng)出現(xiàn)過(guò),就刪除這張圖片
 count += 1
 print('[-] 刪除重復(fù)圖片:' + str(file))
else:
 md5_list.append(md5_value)  # 如果這個(gè)圖片的md5值不存在列表中,就添加進(jìn)列表中
 print('[-] 共刪除重復(fù)圖片:{}張'.format(count))

print('[+] 只有后綴是docx的word文檔才可以提取圖片!??!')
path = input('[+] 請(qǐng)輸入word文檔所在文件夾:')  # 獲取原始的word文檔所在路徑
os.chdir(path)
print("[+] 請(qǐng)輸入一個(gè)路徑,用來(lái)存放所有的圖片")
print("[+] 或者按回車鍵,我將自動(dòng)把圖片整理之后存放在你的桌面")
path1 = input('')  # path1 用來(lái)存放所有的圖片文件
if len(path1):
 pass
else:
 desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')  # 獲取桌面路徑
 path1 = os.path.join(desktop_path, '所有word文件中的圖片')
 os.makedirs(path1)
files = os.listdir(path)  # 獲取指定文件夾下的所有文件
for file in files:  # 遍歷指定文件夾下的所有文件
 if file.endswith('docx'):  # 加一個(gè)判斷,這樣即使path路徑下有別的類型文件也無(wú)妨
  filename = file.rpartition('.')[0]  # 獲取文件的文件名
  file_path = os.path.join(path, filename)
  os.makedirs(file_path)  # 為獲取到的文件名創(chuàng)建一個(gè)文件夾
  shutil.move(file, file_path)  # 把word文檔移動(dòng)到同名文件夾中
  word_path = os.path.join(file_path, file)  # 獲取此時(shí)word文件的文件路徑
  extract_zip(word_path)  # 不用改后綴,直接解壓docx文件
get_picture(path)
only_one(path1)
print('[-] 現(xiàn)有圖片:{}張'.format(len(os.listdir(path1))))

GIF示例


Everything提取文件的演示(手動(dòng)處理同名word文件,我這里對(duì)同名文件進(jìn)行替換):

附:doc轉(zhuǎn)docx

介紹一下實(shí)現(xiàn)二者互轉(zhuǎn)
需要說(shuō)明的是:
要安裝OFFICE,如果是使用金山WPS的,則還不能應(yīng)用
轉(zhuǎn)換速度略慢,但還能接受
如果想轉(zhuǎn)換為其他格式文件,需要在format文件名內(nèi)修改,并用如下save as 參數(shù)

代碼

關(guān)于第9行、第19行代碼:

第9行doc.SaveAs("{}x".format(fn), 12)
"{}x".format(fn)相當(dāng)于把C:\Users\asuka\Desktop\11\123.doc變成了C:\Users\asuka\Desktop\11\123.docx,首先是指定了路徑和文件名,然后12表示存儲(chǔ)成docx格式的,保證了后綴名和格式是對(duì)應(yīng)的。

第19行doc.SaveAs("{}".format(fn[:-1]), 0)
"{}".format(fn[:-1])相當(dāng)于把C:\Users\asuka\Desktop\11\456.docx變成了C:\Users\asuka\Desktop\11\456.doc,指定了要另外保存的文件,保存的路徑和文件名,然后0表示存儲(chǔ)成doc格式的,保證了后綴名和格式是對(duì)應(yīng)的。

from win32com import client

# 轉(zhuǎn)換doc為docx
def doc2docx(fn):
 word = client.Dispatch("Word.Application")  # 打開word應(yīng)用程序
 # for file in files:
 doc = word.Documents.Open(fn)  # 打開word文件
 doc.SaveAs("{}x".format(fn), 12)  # 另存為后綴為".docx"的文件,其中參數(shù)12或16指docx文件
 doc.Close()  # 關(guān)閉原來(lái)word文件
 word.Quit()

# 轉(zhuǎn)換docx為doc
def docx2doc(fn):
 word = client.Dispatch("Word.Application")  # 打開word應(yīng)用程序
 # for file in files:
 doc = word.Documents.Open(fn)  # 打開word文件
 doc.SaveAs("{}".format(fn[:-1]), 0)  # 另存為后綴為".docx"的文件,其中參數(shù)0指doc
 print(fn[:-1])
 doc.Close()  # 關(guān)閉原來(lái)word文件
 word.Quit()

doc2docx(r'C:\Users\asuka\Desktop\11\123.doc')
docx2doc(r'C:\Users\asuka\Desktop\11\456.docx')

到此這篇關(guān)于python提取word文件中的所有圖片的文章就介紹到這了,更多相關(guān)python提取word圖片內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

國(guó)外服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部