Python高效辦公|如何正確處理word中的表格

項目由來

很久沒更新Python高效辦公系列的文章啦,最近就遇到一個很適合Python來做的一件事情,分享給大家。

是這樣的,如word所示,我們需要將裏面的部分數據整理爲excel表格,以便我後期使用。當然,數據我做了脫敏處理,但是這些座標都是真實存在的,是武漢的地標,這就留給大家去探索了;其次,真實的數據有很多,如果一個個拷貝就很麻煩。所以,我們就來看看Python怎麼分分鐘完成這項任務。

解題思路

這裏的關鍵點是提取經緯度(X和Y),X是8位的數字,Y是7位數字,我們這時候很容易想到用正則表達式。正則表達式我之前就有講解過,不愧是YYDS。

X是8位,很好提取,直接用\d{8}就行;但是7位的Y就不能直接這樣寫,因爲這樣也會匹配到X中的數字(因爲X有8位,7位小於8位,會匹配到),所以我們需要在前面和後面加上英文逗號,加以限制。

最後,要解決的就是如何讀取word中的表格,和讀取後怎麼寫入excel表中。這兩個問題使用docx和xlwt庫即可,別忘記安裝這兩個庫。

pip install python-docx
pip install xlwt

實現代碼

下面就是我寫的代碼,都加了註釋,希望大家自己也嘗試寫一下。

from docx import Document #用於讀取word
import re #正則表達式庫
import xlwt #寫入excel的庫

# 創建excel工作簿和sheet,在第一行寫入表頭。
workbook = xlwt.Workbook(encoding='utf-8')
sheet = workbook.add_sheet('點位')
sheet.write(0, 0, "點位")
sheet.write(0, 1, "X")
sheet.write(0, 2, "Y")

# 讀取word,並獲取word中的第一個表
doc = Document('座標.docx')
tb1 = doc.tables[0]

# 定義臨時變量,用於一行行寫入數據到excel。
j = 1

# 讀取word表中的數據,正則表達式提取後寫入excel中。
for i in range(len(tb1.rows)):
    if i == 0:
        continue
    title = tb1.cell(i, 0).text
    coordinate = tb1.cell(i, 3).text
    lons = re.findall('(\d{8})', coordinate)
    lats = re.findall(',(\d{7}),', coordinate)
    for lon, lat in zip(lons, lats):
        sheet.write(j, 0, title)
        sheet.write(j, 1, lon)
        sheet.write(j, 2, lat)
        j += 1
    print(title, lons, lats)

# 保存文件
workbook.save('test.xls')

最後,大家有沒有碰到過類似重複操作的任務,大家平時是怎麼做的,留言和我討論吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章