https://blog.csdn.net/HUSTER_LC/article/details/79367286
1、遇到問題
工作中遇到一個問題,需要從dcox文檔中抽取特定的段落;通過對目標對象的調查,發現目標段落的公共特性:具有同樣的段落樣式,並且有共同的開頭Sysname;
同時存在另外一個問題,存在多個目標文檔,且這些目標文檔存在同一個目標文件夾中
2、解決方案
先解決問題1:獲取指定路勁下的特定文檔的目標段落
在解決問題2 :獲取指定路徑下的docx文檔的列表
1、問題 1 :
使用python docx 獲取目標文檔的目標段落並使用re模塊查找包含Syname的段落
2、問題 2:
使用os改變工作路徑,並獲取特定路勁下的文檔列表,送給1進行處理
3、實施
1、打開目標文檔,獲取目標段落
-
#-*- coding = utf-8 -*-
-
import docx
-
#獲取docx文檔的所有段落 path : 相對路徑包含文檔名稱
-
def getpara(path):
-
try :
-
docx_temp = docx.Document(path)
-
except :
-
print( "can't open the docx")
-
return False
-
try :
-
docx_para = docx_temp.paragraphs
-
print( "Succeed getting the para:",path)
-
return docx_para
-
except :
-
print( "can't get the ",path," paragraphs")
-
return False
-
import re
-
#從段落中抽取目標段落
-
def findpara(parpas,str = "Sysname"):
-
try :
-
para_list = [ "start"]
-
pattern = re.complie(str)
-
for para in paras :
-
match1 = pattern.search(para.text)
-
if match1 :
-
para_list.append(para.text)
-
-
para_list.pop( 0)
-
retuen para_list
-
except :
-
return False
2、將查找到的段落寫入txt文件
-
#將制定一個列表的內容寫入txt文件
-
def list2txt(list,name="com") : #文件名默認為com.txt
-
if len(list) :
-
try :
-
fp = open( "com.txt","w")
-
for cloe in list :
-
fp.write(cloe)
-
fp.write( "\n")
-
except :
-
return False
-
finally:
-
fp.close()
3、工作目錄切換與獲取指定路徑的文檔列表
-
import os
-
#切換工作路徑 返回該路徑下的文檔列表
-
def set_wd(wd == '0') :
-
if wd == '0' :
-
try :
-
os.chdir(wd)
-
File_List = os.listdir(wd)
-
return File_List
-
except :
-
print( "Error")
-
return False
-
else :
-
try :
-
wd = os.getcwd()
-
os.chdir(wd)
-
print( "Using the current path word")
-
File_List = os.listdir(wd)
-
return File_List
-
except :
-
print( "Error")
-
return False
-
-