原文章:復制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內容
學會了沒,是不是很簡單。