中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

岗巴县| 淄博市| 云霄县| 筠连县| 四川省| 深水埗区| 灯塔市| 航空| 岑巩县| 安化县| 太和县| 镇原县| 南丰县| 酒泉市| 怀远县| 施甸县| 图片| 颍上县| 壤塘县| 晋中市| 天长市| 黄梅县| 资兴市| 南宁市| 兴文县| 师宗县| 都江堰市| 福泉市| 乡城县| 会东县| 峡江县| 仙游县| 元氏县| 小金县| 鄱阳县| 宣武区| 通海县| 翁牛特旗| 高碑店市| 富源县| 锡林郭勒盟|