第2周總結(jié)

1 MySQL 的 utf-8

MySQL 數(shù)據(jù)庫的 utf-8 編碼數(shù)據(jù)讀取:MySQL 如果數(shù)據(jù)庫創(chuàng)建時(shí)使用了utf-8纯赎,存數(shù)據(jù)的時(shí)候是utf-8巡莹,那么在python讀數(shù)據(jù)庫,那么在也需要設(shè)定 utf-8 編碼抢韭。

推薦使用

import MySQLdb
db = MySQLdb.connect(...)
db.set_character_set('utf8')
cursor = db.cursor()
cursor.execute('SET NAMES utf8;')

或者參數(shù)上設(shè)定charset。參照 python,mysql,MySQLDb支持中文(utf-8編碼)

db = MySQLdb.connect(..., charset="utf8");
db = db.cursor();
db.execute("SET NAMES utf8");

或者兩個(gè)值都寫到參數(shù)中恍箭。參照 Writing UTF-8 String to MySQL with Python

conn = MySQLdb.connect(charset='utf8', init_command='SET NAMES UTF8')

對于 db.execute("SET NAMES utf8") 語句刻恭,以下三條效果是一樣的:

cursor.execute("SET NAMES utf8;") 
cursor.execute("SET CHARACTER SET utf8;") 
cursor.execute("SET character_set_connection=utf8;") 

2 Python 自帶的 logging 模塊

logging 模塊的使用。以下代碼實(shí)現(xiàn)了:debug及以上級別日志寫入 my_app.log 文件中扯夭,同時(shí) info 級別及其以上級別的日志也輸出到終端鳍贾。

# coding:utf-8
import logging

logging_cfg = {'filename':'my_app.log'}

def init_logging():
    logging.basicConfig(level=logging.DEBUG,
                        format='[%(asctime)s - %(levelname)-8s - %(filename)s - line: %(lineno)d]  %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename=logging_cfg.get('filename', 'default_logging.log'),
                        filemode='a')

    # 定義一個(gè)StreamHandler,將INFO級別或更高的日志信息打印到標(biāo)準(zhǔn)錯(cuò)誤交洗,并將其添加到當(dāng)前的日志處理對象
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('[%(asctime)s - %(name)s - %(levelname)-8s] %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)
    logging.info('logging module initialized, save as {}'.format(logging_cfg.get('filename', 'default_logging.log')))

init_logging()

logging.info('MAIN PROCEDURE BEGIN')
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.info('MAIN PROCEDURE BEGIN')

logging 模塊可參考:

15.7. logging— Logging facility for Python

Logging HOWTO

3 Python 字符串占位符 %s.format()

%s 是舊式占位符骑科,.format() 是新式占位符,更推薦使用构拳。

3.1 占位符對于位數(shù)的控制

我第一次看見看見 "%3d" % 這種操作時(shí)咆爽,以為是做“求余”的運(yùn)算,特別是對后面的隨機(jī)數(shù)求余置森,然而并不是斗埂。所以盡量使用 .format() 提高可讀性。

import random
print "%3d" % random.randint(1, 999)
print "{:0>3d}".format(random.randint(1, 999))

# 構(gòu)建齊整的位數(shù)
print "user_name" + "{:0>3d}".format(random.randint(1, 999))

print "%0.2f" % 99.12345
print "{:.2f}".format(+99.12345)
print "{:.2f}".format(-99.12345)
print "{:+.2f}".format(+99.12345)
print "{:+.2f}".format(-99.12345)

輸出結(jié)果

606
531
user_name234
99.12
99.12
-99.12
+99.12
-99.12

3.2 更多的 .format() 的好處

%s 一不注意就會(huì)寫成第一行注釋掉的代碼暇藏,導(dǎo)致報(bào)錯(cuò)蜜笤。對于多變量的占位符濒蒋,必須構(gòu)成元組盐碱。而且元組中的變量個(gè)數(shù)要和占位符數(shù)量相等。所以還是推薦 .format()沪伙,可以用 {}瓮顽,也可以指定元素所在位置 {1},或者可以使用變量代替围橡。

# print "Here are %s and %s" % "Li Lei", "Han Meimei"   # 不寫括號來構(gòu)成元組暖混,Python 會(huì)報(bào)錯(cuò)
print "Here are %s and %s" % ("Li Lei", "Han Meimei")

# 類似于 %s 的用法
print "Here are {} and {}".format("Li Lei", "Han Meimei")

# 指定位數(shù)
print "Here are {1} and {0}. {0} is the first.".format("Li Lei", "Han Meimei")
print "Here are {1} and {2}".format("Li Lei", "Han Meimei", "Jim")

# 變量名代替
print "Here comes {person_1} and {person_2}".format(person_1="Li Lei", person_2="Han Meimei")
# 變量名代替,而且可以只是用一個(gè)變量
print "Here comes {person_1}.".format(person_1="Li Lei", person_2="Han Meimei")

4 兩種方式獲取當(dāng)前時(shí)間 datetime 與 time

重點(diǎn)是 datetime.datetim.now() 不是秒時(shí)間翁授,用 time.time() 得到的秒數(shù)拣播,int() 轉(zhuǎn)換之后晾咪,就可以兩個(gè)時(shí)間簡單相減獲得時(shí)間間隔,用來獲取某一段代碼耗時(shí)比較有用贮配。



?```python
In [1]: from datetime import datetime
In [1]: from datetime import datetime

In [2]: from time import time

In [3]: t = datetime.fromtimestamp(time())

In [4]: t
Out[4]: datetime.datetime(2017, 8, 3, 17, 23, 22, 6560)

In [5]: t.strftime("%H:%M:%S")
Out[5]: '17:23:22'

In [6]: t.strftime("%H:%M:%S:%f")
Out[6]: '17:23:22:006560'

In [7]: t.strftime("%H:%M:%S %f")
Out[7]: '17:23:22 006560'

In [8]: t.strftime("%H:%M:%S %fms")
Out[8]: '17:23:22 006560ms'

In [9]: datetime.now().strftime("%H:%M:%S %fms")
Out[9]: '17:25:15 110922ms'

5 文件頂部的語句會(huì)被執(zhí)行

假設(shè)同一目錄下谍倦,有兩個(gè)文件 a.py 和 b.py,如果想在 a.py 文件中引用了 b.py 文件中的 var_c 變量泪勒。

# a.py
from b import var_c

print var_c

結(jié)果發(fā)現(xiàn)昼蛀,引用的時(shí)候,會(huì)同時(shí)把 var_c = 123 以上的語句都執(zhí)行了圆存。

# b.py
print "hello"

def te():
    print "where"
te()

var_c = 123

參考 寫在Python模塊頂層的代碼引起的一個(gè)Bug

6 另外的小 tips

6.1 Linux 查找進(jìn)程叼旋,并 kill 進(jìn)程

ps aux 是查看所有進(jìn)程,grep xxx 是查找對應(yīng)名稱沦辙,kill -9 XXX 是殺死 xxx 編號的進(jìn)程.

ps aux|grep python en.py
kill -9 xxx

6.2 python 函數(shù)可以使用函數(shù)外變量夫植,但是要改變變量,加 global

參考 python中在哪些情況下必須使用global來聲明全局變量油讯?

6.3 二進(jìn)制去除 '0b' 并補(bǔ)齊位數(shù)

zfill() 函數(shù)補(bǔ)齊至相應(yīng)位數(shù)偷崩。

  • 對于 1 到 3 取數(shù)
  • 對每個(gè)數(shù)求二進(jìn)制數(shù),用 bin() 方法撞羽,得到 0b 開頭的二進(jìn)制數(shù)
  • replace()阐斜,去除 0b
  • 最后用 zfill(10) 填滿10位。
>>> for i in range(1, 3):
...     print bin(i).replace("0b","").zfill(10)
...
0000000001
0000000010
0000000011
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诀紊,一起剝皮案震驚了整個(gè)濱河市谒出,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邻奠,老刑警劉巖笤喳,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碌宴,居然都是意外死亡杀狡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門贰镣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呜象,“玉大人,你說我怎么就攤上這事碑隆」Ф福” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵上煤,是天一觀的道長休玩。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么拴疤? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任永部,我火速辦了婚禮,結(jié)果婚禮上呐矾,老公的妹妹穿的比我還像新娘扬舒。我一直安慰自己,他們只是感情好凫佛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布讲坎。 她就那樣靜靜地躺著,像睡著了一般愧薛。 火紅的嫁衣襯著肌膚如雪晨炕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天毫炉,我揣著相機(jī)與錄音瓮栗,去河邊找鬼。 笑死瞄勾,一個(gè)胖子當(dāng)著我的面吹牛费奸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播进陡,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愿阐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趾疚?” 一聲冷哼從身側(cè)響起缨历,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糙麦,沒想到半個(gè)月后辛孵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡磅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年魄缚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焚廊。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冶匹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出节值,到底是詐尸還是另有隱情徙硅,我是刑警寧澤榜聂,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布搞疗,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匿乃。R本人自食惡果不足惜桩皿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幢炸。 院中可真熱鬧泄隔,春花似錦、人聲如沸宛徊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闸天。三九已至暖呕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苞氮,已是汗流浹背湾揽。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笼吟,地道東北人库物。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像贷帮,于是被迫代替她去往敵國和親戚揭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1【工作部分】 1.1一級分類時(shí)間開銷周記錄 工作部分時(shí)間開銷——12月第二周記錄【12月5日至11日】 本周工作...
    加一的修煉場閱讀 675評論 0 3
  • 早睡早起第二周 時(shí)間飛逝撵枢,轉(zhuǎn)眼之間毫目,七天的日子就這樣過去了! 鍛煉:每四天反復(fù)學(xué)習(xí)24式太極拳的四個(gè)招式诲侮,每天練習(xí)...
    六月荷田田閱讀 193評論 2 3
  • 這是頹廢的一周镀虐,也是回家的一周 做的事情 1.回家 2.《算法數(shù)據(jù)結(jié)構(gòu)javascript》完成75%,當(dāng)然感覺最...
    醬油_閱讀 176評論 0 0
  • 這幾日在醫(yī)院照顧媽媽沟绪,過著有點(diǎn)狼狽的日子刮便。 幾次晚上安頓下媽媽后,我都想記下點(diǎn)什么绽慈,卻不知道從何說起恨旱。 醫(yī)院對我來...
    吃草姑娘閱讀 483評論 6 8
  • 腦海中也有過一個(gè)場景 不知拙筆能否表清 城中高樓有一位相思女 貌驚艷絕倫 憑窗一現(xiàn) 便可引眾人駐足 城郊有位采茶人...
    熱忱a閱讀 295評論 0 0