【Python】自動化:讀取word提取json並重新排版(已升級支持打印)


原文章:復制and粘貼?Python腳本1分鍾解決了我1小時的事!

https://mp.weixin.qq.com/s/NeawdsRjws9vzsYfwvUIjg

 

需求:將word格式json內容的問題和答案整理成整段,人類可讀模式

 

看到上面的內容,手工操作是不是很麻煩。

別忘了有Python啥都不是事。下面是原作者的代碼

from docx import Document
import re
import pandas as pd
import json 
# 1.讀取word文檔,獲取word文檔里面的內容
x = ""
doc = Document(r"G:\1Pycharm_Project\3572(1).docx")
for paragraph in doc.paragraphs:
    text = paragraph.text
    # 讀取word里面的內容有一個特點:每一頁會返回一個字符串,共3頁,一共返回了3個單獨的字符串。
    # 但是這是一個完整的json字符串,我們不能將他分開呀。因此,使用字符串拼接,將其合並起來。
    x += text
    
# 2.使用json.loads()將json字符串 轉換為 字典格式的數據。
r = json.loads(x)

# 3.對於字典,我們可以利用鍵,獲取里面的值。
x = []
z = []
for i in r["data"]["ques"]:
    x.append(i["content"])
    y ""
    for j in i["options"]:
        y += j["answer"] + " " + j["option"]
        y += ""
    z.append(y)
    
# 4.將獲取到的數據,保存成一個DataFrame格式的數據,並導出為excel表格。
data = {"content":x,"options":z}
df = pd.DataFrame(data)
display(df)
df.to_excel("text.xlsx")

效果如下

 

 

 感謝群主提供原文件和思路,升級優化才得以實現。

 

前面和原創一致,后面數據整理略微差異。

安裝庫文件

# 關於from docx import Document報錯問題,docx庫比較老,安裝python-docx就可以解決問題。
!pip install  python-docx

解析文本

from docx import Document
import re
import pandas as pd
import json 
# 1.讀取word文檔,獲取word文檔里面的內容
x = ""
doc = Document("jsonfile.docx")
for paragraph in doc.paragraphs:
    text = paragraph.text
    # 讀取word里面的內容有一個特點:每一頁會返回一個字符串,共3頁,一共返回了3個單獨的字符串。
    # 但是這是一個完整的json字符串,我們不能將他分開呀。因此,使用字符串拼接,將其合並起來。
    x += text
    
# 2.使用json.loads()將json字符串 轉換為 字典格式的數據。
r = json.loads(x)
r

輸出內容

 

 解析處理,調整格式

# 3.對於字典,利用鍵獲取里面的值。
queslst=[]
optlst=[]
n=1
for i in r['data']['ques']:
    question=str(n)+''+i['content'].rstrip()
    n+=1
    ops=[]
    for option in i['options']:
        j = option["option"]+""+ option["answer"].rstrip()
        ops.append(j)
    ops='\t'.join(ops)   
    queslst.append(question)
    optlst.append(ops)

寫入excel

# 4.將獲取到的數據,保存成一個DataFrame格式的數據,並導出為excel表格。
data = {"question":queslst,"options":optlst}
df = pd.DataFrame(data)
display(df)
df.to_excel("output2.xlsx",index=None)

輸出格式

 

 

excel內容

 

 

新增點,存為word格式,需要重新排版

效果預覽

 

# 5、寫入docx
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

from time import strftime, localtime
timestr=strftime('%Y-%m-%d %H:%M:%S',localtime())

doc1 = Document()  #生成一個空的docx對象
head=doc1.add_heading('安全測試題', level=1) # 添加標題
head.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中
p1=doc1.add_paragraph('edit by:HuaBro \t update time: {}'.format(timestr))   # 添加段落
p1.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中


for i,j in zip(queslst,optlst):
    doc1.add_paragraph(i)
    doc1.add_paragraph(j)
doc1.styles['Normal'].font.name = '宋體'
doc1.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體') # 字體
doc1.styles['Normal'].font.name = 'Times New Roman' # 數字字體
doc1.save('output1.docx')  

輸出word內容

 

 

學會了沒,是不是很簡單。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM