我用 Python 做些什麼?

小小後端發表於2019-03-18

我主要工作是後端,所以這一點我就不說了。本文主要說下我用 Python 做的其它的一些事。

1 資料匯出支撐

一個月可能有一兩次需要匯出一些資料,每次的需求都有些不同。剛開始的時候還好,用資料庫的一些連線工具,比如 Sequel Pro 和 DataGrip 等,直接匯出就能滿足要求。後面呢,有些欄位需要自定義又或者是要連表,用那些工具不大方便,於是就只能自己寫指令碼了。網上找了找,看到 Kenneth Reitz 大牛寫的一個 records 庫,用起來超級爽。

執行 SQL 簡單粗暴

import records

db = records.Database('mysql+pymysql://'
                      'username:password@host:port'
                      '/database?charset=utf8')
rows = db.query('select * from books') 
複製程式碼

讀出的結果使用也比較方便,迭代時使用字典或物件的方式可以直接獲取相應值,相比一些類庫需要自己轉換方便得多

for r in rows:
    print(r['name'], r['price'])
    # 或者
    # print(r.name, r.price)
複製程式碼

匯出格式支援也比較豐富,有 CSV、YAML、xls 等。比如要匯出 xls 檔案

with open('books.xls', 'wb') as f:
    f.write(rows.export('xls'))
複製程式碼

當然,由於這個庫使用起來簡單、靈活,除了匯出之外,還做了一些其它的事。比如,某個表某些資料有異常,要找出是哪幾條,純寫 SQL 太麻煩的時候,使用這個庫也能解決問題。

平時做一些支撐性工作的時候,通過這個庫還是省了不少時間。

2 簡單的程式碼自動生成

開發時我們經常發現某些程式碼結構特別類似,自己一行一行的敲感覺太浪費時間,這個時候我們應該考慮用指令碼來處理。

比如,新增一條資料時,如果用的是 SQLAlchemy 的話,可能會碰到類似的語句

def create(book):
	new_book = Book()
	new_book.name = book.get('name', '')
	new_book.price = book.get('price', 0)
	# ...
	db.session.add(new_book)
	db.session.flush()
複製程式碼

如果當表的欄位特別多的時候,自己一行一行的敲完太痛苦。所以,我們可以寫個指令碼自動生成一下

# coding=utf-8

import records

db = records.Database('mysql+pymysql://'
                      'username:password@host:port'
                      '/database?charset=utf8')

books = db.query('select * from books limit 1')
columns = list(books.as_dict()[0].keys())

for column in columns:
    print(f"new_book.{column} ="
          f" book.get('{column}', '')")
複製程式碼

執行後得到下面的程式碼

new_book.id = book.get('id', '')
new_book.cat_id = book.get('cat_id', '')
new_book.name = book.get('name', '')
new_book.price = book.get('price', '')
複製程式碼

將上面的複製到需要的地方,然後把 get() 的預設值自己根據型別手動調下,就搞定了。

當然,如果在欄位不多的情況下,這樣做反而更浪費時間了。自己根據需要選擇就好。

這裡,只是舉個例子,工作中碰到重複性的任務多的時候,不妨考慮寫個指令碼。剛開始可能費點時間,後面可是效率的大大提升。

3 訊息推送

某些時候,我可能會關注些什麼東西,想在合適的時候提醒我下。比如,我同時關注了好幾個電商平臺上的同一款手機,我希望在這幾個平臺的最低價低於多少的時候提醒我下,我就會寫個指令碼去解決。

思路很簡單,寫個簡單的爬蟲每隔一段時間獲取一下這幾個平臺的這款手機的價格,取最小值,當最小值低於期望值的時候,就告訴我,可以發微信、簡訊或推送訊息到 APP 等。使用微信比較繁瑣,使用簡訊的話免費的又不靠譜,所以我喜歡推送訊息到 APP。最後,將指令碼放到伺服器上一直跑著。

這裡,我推薦個網站 IFTTT(https://ifttt.com),正如其名字(IF This Then That)那樣,推送工具其實就是在這個網站上新建一個應用 ( Applet )並定義好事件( Event )與訊息,當相應事件發生時推送訊息給手機上的 App,當然這個 App 是網站提供的,目前安卓、IOS 都支援。具體怎麼使用,可以看下這篇文章 https://realpython.com/python-bitcoin-ifttt 的這個小節 Sending a Test IFTTT Notification

4 其它

Python 能解決很多日常的小問題,上面只是部分。不同方向、不同興趣的開發者,弄出的小玩意也不盡相同。比如,之前看《東京喰種》的漫畫,在網頁上看載入太慢了,一怒,寫個指令碼開下多執行緒一分鐘不到幾百話全下好了,在本地流暢的看。之前在 GitHub 上也看到一個下載羞羞視訊的庫,都不用自己去找資源了,不過不好意思,庫的名字搞忘了。總之,瞭解一下 Python,即使你不是做相關開發的,它也能幫你解決不少問題。

本文首發於公眾號「小小後端」。

相關文章