L[-1]
- 倒著取元素,右對齊取值,下標(biāo)為-1表示取最后一個
- 配合切片:
L[n1:n2:n3] #起:止:方向*跨度,方向為負(fù)表示倒著變綠遍歷(--i)
取網(wǎng)頁數(shù)據(jù)一定要注意編碼
- python str默認(rèn)編碼是unicode
- print函數(shù)直接打印gbk字符串報錯
- 利用webDriver不用擔(dān)心,它會解析,dirver.page_source就是源碼
- urllib這類返回字節(jié)的需要對應(yīng)頁面的charset 去decode,然而可怕的是gb2312的頁面調(diào)用decode('gb2312')會轉(zhuǎn)換失敗,decode('gbk’)就可以,
大概看臉,子集問題 - I/O操作也要指定編碼
正則表達(dá)式
- re.compile(pattern)生成一個RegexObject()對象,再調(diào)用findall方法,直接re.match('pattern',)少量數(shù)據(jù)好像還好,數(shù)據(jù)一長♂,就匹配失敗了,
對因為確定pattern正確,match失敗以為是編碼亂碼造成的然后跑去encode/decode了半天
關(guān)于整除和%
- python的/是浮點除,整除符號是//,python的整除是向下(負(fù)無窮)舍入,so Python中的%表示求模,而其他C語言家族(C++,C#)是向0舍入,%表示編程課本上的求余
一個奇怪的bug
- print輸出一和十會亂碼,但是用print隨便輸出點其他中文,就輸出正常了。。。
- 好吧,komodo 輸出窗口的鍋,cmd沒問題
Json
- Python中的list[]對應(yīng)Json中的array[],dict{}對應(yīng)Object{},剛好符號一致,而C#的list對應(yīng)Object{},so,這兩種語言通信時要注意,
不好像是C#比較特殊來的? - json.dumps(sort_key=True)可以對無序字典進(jìn)行排序
- Python的json模塊可以處理內(nèi)置數(shù)據(jù)(list,dict,
元組不會拼),對于自定義類,想格式化成json格式需要將實例轉(zhuǎn)換為字典{},d={} d.update(obj.__dict__) json.dumps(d) - json格式字符串轉(zhuǎn)化為實例,需要先json.loads(s)轉(zhuǎn)化為dict,然后調(diào)用類的構(gòu)造函數(shù),↓下面那條第三點
- json.load(open('xx.json),'r')和json.dump(open('xx.json','w'))可以直接讀寫json格式的文件
obj.__dict__
- 獲取對象的屬性,也就是用self修飾的實例屬性
- __init__函數(shù)里self.__dict__.update(obj)會復(fù)制obj(一般是個dict)的所有內(nèi)容給self實例 ,簡直就是拷貝構(gòu)造函數(shù)一樣的存在
- 當(dāng)然也可以Class(**obj)這樣來構(gòu)建新對象,用于json之類的鍵值對格式格外爽
可變參數(shù)和關(guān)鍵字參數(shù)
- 可變參數(shù)*
- 形參使用*修飾表示該參數(shù)接受一組任意長度的數(shù)據(jù), 函數(shù)里實際接收的數(shù)據(jù)是一個list或是一個tuple
- 實參前添加*表示將list或tuple的每個值按順序傳入形參位置
- 關(guān)鍵字參數(shù)**
- 接受一組dict(鍵值對)形式的參數(shù),會將與key對應(yīng)的value賦給同名形參,無序(字典本身就是無序的)
- 上一條使用**obj作為參數(shù)的構(gòu)造函數(shù)就是很好的體現(xiàn),
這條和上條和上上條其實是有聯(lián)系的對不對
控制臺中的進(jìn)度條
- '\r',將光標(biāo)移到行首(\n是下一行,print()函數(shù)默認(rèn)添加了\n)
- sys.stdout.write()對將要輸出的內(nèi)容不添加任何結(jié)尾符,再調(diào)用sys.stdout.flush()將輸出內(nèi)容暫存在控制臺
- 或者直接print('xxxx',end='\r')
- '\b',退格,刪除前面打印的內(nèi)容,沒什么好說的
- 下載進(jìn)度:
request.urlretrieve(url,file,hook),其中hook的參數(shù)為已下載數(shù)據(jù)塊a,數(shù)據(jù)塊大小b,遠(yuǎn)程文件大小c,per=a*b*100/c - 在資源管理器中打開
os.system('explorer/select,%s'% path)