日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

pythondocx批量提取目录及内容_一个可以选择目录生成doc目录内容的小工具(三) -python-docx...

發布時間:2025/3/20 python 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythondocx批量提取目录及内容_一个可以选择目录生成doc目录内容的小工具(三) -python-docx... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說到docx的用法,度娘一大堆,眼花繚亂的。這里就不啰嗦了,基本上就是新建個Document對象,然后往上邊加標題、段落、表格。附帶設置這些對象的字型字號啥的。不過有一點,docx和python-docx是兩個庫,看帖的時候要小心。建議看官方文檔

接著看看我們的目標:

為了實現這種編號,我先是想修改本地docx的樣式來解決,生成文檔的時候只設置成幾級標題,不設置任何樣式,在本機修改默認樣式模板。結果,沒啥用。

然后我想會不會在docx的標題樣式里有相關的設置,然后就找到了這個

編號樣式還沒有實現,果然大神研發鄙視python還是有道理的。那現在只能從樣式模板上入手了,找了半天也沒有發現指定模板的的方法,docx庫的默認模板和本地的模板不是指一個東東。

無奈了,最后選擇笨辦法,手工賦值:比較難受的是因為要操作全局變量取編號,但目錄和廣度和深度都是不確定因素,所以只能定死。

思路就是使用全局變量n來判斷目錄的廣度,使用num確定目錄的深度,讀取各個全局變量listxx里的編號將編號加到item名前。如果有更美觀的實現方式,請諸位看客一定留言告知。

代碼如下:

import os

import os.path

from docx import Document

from docx.enum.style import WD_STYLE_TYPE

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from docx.oxml.ns import qn

from docx.shared import Inches, Pt, RGBColor

#初始化doc對象、

def Init():

global doc

doc = Document()

doc.styles["Normal"].font.name = u'宋體'

doc.styles["Normal"].font.size = Pt(12)

doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

doc.styles["heading 1"].font.size=Pt(20)

name = doc.add_paragraph()

run = name.add_run(r'本周主要內容')

run.font.size = Pt(25)

run.font.name = u"宋體"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

name.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# head = doc.add_heading("", level=1)

# run = head.add_run(u"主要內容")

# run.font.size = Pt(12)

# run.font.color.rgb = RGBColor(0, 0, 0)

# run.font.name = u"宋體"

# run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

# head.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

def Save(dst):

global doc

try:

doc.save(dst)

return True

except IOError as e:

last_err = e.strerror

return False

#設置段落

def AddListText(text):

global doc

p = doc.add_paragraph(style='List Number')

run = p.add_run(text)

run.font.size = Pt(15)

run.font.name = u"宋體"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

def AddLineText(text):

global doc

name = doc.add_paragraph(style='List Number')

run = name.add_run(text)

run.font.size = Pt(15)

run.font.name = u"宋體"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

global numlist1,numlist2,numlist22,numlist3,numlist33,n

n = 0

numlist1 = ['一、','二、','三、','四、','五、','六、','七、','八、','九、','十、']

numlist2 = ['(一)、', '(二)、', '(三)、', '(四)、', '(五)、', '(六)、', '(七)、', '(八)、', '(九)、', '(十)、']

numlist22 = ['(一)、', '(二)、', '(三)、', '(四)、', '(五)、', '(六)、', '(七)、', '(八)、', '(九)、', '(十)、']

numlist3 = ['1、','2、','3、','4、','5、','6、','7、','8、','9、','10、']

numlist33 = ['1、','2、','3、','4、','5、','6、','7、','8、','9、','10、']

def Addhead(text,num):

global doc

if num == 1 :

listnum = num - 1

head = doc.add_heading("", level=num)

run = head.add_run(numlist1.pop(listnum)+text)

run.font.name = u"宋體"

elif num == 2:

listnum = num - 2

head = doc.add_heading("", level=num)

print(n)

if n == 1:

try:

run = head.add_run(numlist2.pop(listnum) + text)

except Exception as e:

print(e)

run.font.name = u"宋體"

else:

try:

run = head.add_run(numlist22.pop(listnum) + text)

except Exception as e:

print(e)

run.font.name = u"宋體"

elif num == 3:

listnum = num - 3

if n == 1:

head = doc.add_heading("", level=num)

run = head.add_run(numlist3.pop(listnum) + text)

run.font.name = u"宋體"

else:

head = doc.add_heading("", level=num)

run = head.add_run(numlist33.pop(listnum) + text)

run.font.name = u"宋體"

Init()

def _showdir(path, depth):

for item in os.scandir(path):

# AddListText(item.name)

print("| " * depth + "+--" + item.name)

# AddLineText(" " * depth + " " + item.name)

Addhead(item.name, depth + 1)

#遞歸出口

if item.is_dir():

_showdir(item.path, depth + 1)

def showdir(path, depth):

for item in os.scandir(path):

global n

n += 1

print("| " * depth + "+--" + item.name)

Addhead(item.name, depth + 1)

#遞歸出口

if item.is_dir():

_showdir(item.path, depth + 1)

file = r'C:\Users\zhaobw\Desktop\demo.docx'

Save(file)

if __name__ == '__main__':

path = r'C:\Users\zhaobw\Desktop\測試'

showdir(path, 0)

# showlistdir(path, 0)

總結:

這一節完后了docx的測試,需求基本上都已經完成了。下一步將邏輯代碼貼到gui里,或者調用都可以。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的pythondocx批量提取目录及内容_一个可以选择目录生成doc目录内容的小工具(三) -python-docx...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。