91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么將Word文檔轉換為Excel表格

發布時間:2021-07-10 14:43:08 來源:億速云 閱讀:750 作者:Leah 欄目:大數據

Python中怎么將Word文檔轉換為Excel表格,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

測試word文檔讀取

先測試一個word文檔前1頁的數據讀取:

from docx import Document

doc = Document("編號02 質檢員高級技師(一級)理論試卷.docx")
for i, paragraph in enumerate(doc.paragraphs[:55]):
    print(i, paragraph.text)

匹配題型、題目和具體的選項

現在我們需要做的是就是匹配題型、題目和具體的選項,觀察可以發現規律:

  1. 題型以大寫數字開頭

  2. 題目以普通數字+.開頭

  3. 選項以括號+字母開頭

?

額外需要注意的:

開頭幾行文本也存在普通數字+.開頭的,需要直接排除。

第7題的題目,和第19題的選項存在一些特殊的空白字符需要排除,

括號和小數點都同時存在半角和全角兩種情況。

?

對于需要注意的第二點:

Python中怎么將Word文檔轉換為Excel表格

查看一下這2處的空白字符:

doc.paragraphs[21].text

'7.(\xa0\xa0)是第一家實施六西格瑪管理的公司。\xa0'

doc.paragraphs[49].text

'(A)參數設計 (B)常量設計\u3000 (C)變量設計\u3000\u3000 (D)系統設計'

發現分別是\xa0和\u3000。

整理好大致思路,我組織一下處理代碼:

import re
from docx import Document

doc = Document("編號02 質檢員高級技師(一級)理論試卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")


# 從word文檔的“一、單項選擇題”開始遍歷數據
for paragraph in doc.paragraphs[5:25]:
    #  去除空白字符,將全角字符轉半角字符,并給括號之間調整為中間二個空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 對于空白行就直接跳過
    ifnot line:
        continue
    if title_rule.match(line):
        print("題目", line)
    elif option_rule.match(line):
        print("選項", option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            print("題型", chinese_nums_match.group(1))

保存匹配到的數據到結構化字典

現在我打算將當前匹配出來的文本數據存儲成字典形式的結構化數據,字典結構的設計如下:

Python中怎么將Word文檔轉換為Excel表格

根據上述設計完善代碼:

import re
from docx import Document
from collections import OrderedDict

doc = Document("編號02 質檢員高級技師(一級)理論試卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")

# 保存最終的結構化數據
question_type2data = OrderedDict()
# 從word文檔的“一、單項選擇題”開始遍歷數據
for paragraph in doc.paragraphs[5:]:
    #  去除空白字符,將全角字符轉半角字符,并給括號之間調整為中間一個空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 對于空白行就直接跳過
    ifnot line:
        continue
    if title_rule.match(line):
        options = title2options.setdefault(line, [])
    elif option_rule.match(line):
        options.extend(option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            question_type = chinese_nums_match.group(1)
            title2options = question_type2data.setdefault(question_type, OrderedDict())

遍歷結構化字典并存儲

然后我們遍歷結構化字典,將數據保存到pandas對象中:

import pandas as pd

result = []
max_options_len = 0
for question_type, title2options in question_type2data.items():
    for title, options in title2options.items():
        result.append([question_type, title, *options])
        options_len = len(options)
        if options_len > max_options_len:
            max_options_len = options_len
df = pd.DataFrame(result, columns=[
                  "題型", "題目"]+[f"選項{i}"for i in range(1, max_options_len+1)])
# 題型可以簡化下,去掉選擇兩個字
df['題型'] = df['題型'].str.replace("選擇", "")
df.head()

結果:

如何用Python將Word文檔轉換為Excel表格

最終保存結果:

df.to_excel("result.xlsx", index=False)

完整代碼

最終完整代碼:

import pandas as pd
import re
from docx import Document
from collections import OrderedDict

doc = Document("編號02 質檢員高級技師(一級)理論試卷.docx")

black_char = re.compile("[\s\u3000\xa0]+")

chinese_nums_rule = re.compile("[一二三四]、(.+?)\(")
title_rule = re.compile("\d+.")
option_rule = re.compile("\([ABCDEF]\)")
option_rule_search = re.compile("\([ABCDEF]\)[^(]+")

# 保存最終的結構化數據
question_type2data = OrderedDict()
# 從word文檔的“一、單項選擇題”開始遍歷數據
for paragraph in doc.paragraphs[5:]:
    #  去除空白字符,將全角字符轉半角字符,并給括號之間調整為中間一個空格
    line = black_char.sub("", paragraph.text).replace(
        "(", "(").replace(")", ")").replace(".", ".").replace("()", "(  )")
    # 對于空白行就直接跳過
    ifnot line:
        continue
    if title_rule.match(line):
        options = title2options.setdefault(line, [])
    elif option_rule.match(line):
        options.extend(option_rule_search.findall(line))
    else:
        chinese_nums_match = chinese_nums_rule.match(line)
        if chinese_nums_match:
            question_type = chinese_nums_match.group(1)
            title2options = question_type2data.setdefault(
                question_type, OrderedDict())

result = []
max_options_len = 0
for question_type, title2options in question_type2data.items():
    for title, options in title2options.items():
        result.append([question_type, title, *options])
        options_len = len(options)
        if options_len > max_options_len:
            max_options_len = options_len
df = pd.DataFrame(result, columns=[
                  "題型", "題目"]+[f"選項{i}"for i in range(1, max_options_len+1)])
# 題型可以簡化下,去掉選擇兩個字
df['題型'] = df['題型'].str.replace("選擇", "")
df.to_excel("result.xlsx", index=False)

最終得到的文件:

Python中怎么將Word文檔轉換為Excel表格

關于Python中怎么將Word文檔轉換為Excel表格問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨脱县| 平遥县| 区。| 甘南县| 锡林郭勒盟| 隆德县| 裕民县| 招远市| 读书| 安乡县| 略阳县| 晋江市| 茂名市| 西盟| 本溪市| 鱼台县| 枣庄市| 泸定县| 城固县| 简阳市| 普兰县| 彭州市| 阳谷县| 叙永县| 肇州县| 包头市| 望谟县| 淮阳县| 鄂伦春自治旗| 濉溪县| 澎湖县| 平南县| 六安市| 且末县| 大田县| 门头沟区| 弥渡县| 博客| 新昌县| 宜君县| 北宁市|