1.urlencode
urlencode的參數是詞典,它可以將key-value這樣的鍵值對轉換成我們想要的格式。python2中:urlencode在urllib.urlencode
python3中:urlencode在urllib.parse.urlencode
urlencode用於需要轉換爲unicode編碼的情況;
params = {
"q": "mac",
"perPageSize": 1
}
query_str = urllib.parse.urlencode(params)
#輸出的結果爲
q=mac&perPageSize=1
2.根據url和params格式化爲url
urlencode用於需要轉換爲unicode編碼的情況;
def format_url(url, params: dict=None) -> str:
query_str = urllib.parse.urlencode(params)
return f'{ url }?{ query_str }
如果不需要轉換編碼,保持原來格式就可以,則可以用:
def get_full_url(self,url, uri: dict) -> str:
return url + '?' + '&'.join([str(key) + '=' + str(value) for key, value in uri.items()])
3.解碼和編碼
通過quote實現編碼,通過unquote來實現解碼
urllib.parse.quote("豆漿機")
urllib.parse.unquote("豆漿機")
4.將列表轉換爲字典(將對應的列表的值作爲鍵組成字典)
brands_name = ['jiuyang','iphone']
brands_value = dict.fromkeys(brands_name, '1')
5.通過zip來實現並行遍歷
list(zip(L1,L2))
--------------
for (x,y) in zip(L1,L2):
print(x,y,'---',x+y)
--------------
brands = []
for brand_name, brand_url in zip(brands_name, brands_url):
brand = {}
brand['brand_name'] = brand_name
brand['brand_url'] = brand_url
brands.append(brand)
6.創建一個指定長度的,值爲1的列表
[1] * 10
7.儘量不要直接import一個模塊
而要通過from…import語句來引用,from parsers.common import Source 會好一些,在更清晰的同時避免common中的變量污染了當前的命名空間
8.字典取數據的用法
通常字典取數據時用get的方法來取,但是比並不是都是按get取就比較好。
通常,使用get來取外部不確定的數據,直接使用中括號取確定的數據,爲了避免異常,而自己未知
9.判斷None的寫法
python裏面判斷None,使用if not self.keyword 就行,這樣比較pythonic
10.將url分解爲字典參數串的方法
def get_url_query_dict(url) -> dict:
url_parse = urlparse(url)
query_str = url_parse.query
if query_str is not '':
return {param.split('=')[0]: param.split('=')[1] for param in query_str.split('&')}
11.使用f-strings來進行格式化操作
f'https://search.jd.com/Search?keyword={self.keyword_encode}&enc=utf-8&page=1'
12.字符串與json格式的轉換
13.使用update對列表中的字典元素添加元素
goods = [{'a':1,'b':2,'c':3},{'a':4,'b':5,'c':6}]
[i.update({'d':11,'e':12}) for i in goods]
14. 創建所有值都相同的字典
dict.fromkeys(['a','b'],0)
15. list轉換爲字符串
"".join(list)
16.str轉換爲list
name_list.split('\n')
17.print輸出變量控制
#30 表示30位,.6表示小數點6位數
print('Add {:30} with p-value {:.6}'.format(best_feature, best_pval))
18.倒敘騷寫法:
lis = [1,2,3,4,5,6]
for i in range(len(lis), 0, -1):
print(i)
19.字典賦值
字典索引賦值
import numpy as np
dicttest = {}
for i in range(1,3):
dicttest[i] = np.zeros((6,))
#得到的結果爲
{1: array([0., 0., 0., 0., 0., 0.]), 2: array([0., 0., 0., 0., 0., 0.])}
20.對列表中的數值進行排序
nums = [1123,12,4,56,3]
# 從小到大進行排序
nums.sort()
# 從大到小進行排序
nums.sort(reverse = True)
# 對列表中的值進行反轉
nums.reverse()
21.對“””字符串文本進行格式化
str = 'python'
print("""讓業務
系統%s用
起來
更快
""" % str)
22.對列表中的字典進行排序
infos = [{"name":"laowang","age":10},{"name":"xiaoming","age":20},{"name":"banzheng","age":30}]
# 冒號後面的相當於是返回的值
# 對於匿名函數的理解,將第一個x看作是輸入的值,而第二個看作是輸出
infos.sort(key = lambda x : x['name'])
print(infos)
23.判斷文件夾是否存在,不存在即創建
dirs = './TM/'
if not os.path.exists(dirs):
os.mkdir(dirs)
24.Python保存圖片文件及檢查圖片文件寫入成功
25.使用ipdb進行單步調試
import ipdb
ipdb.set_trace()
26.urljoin的使用
urljoin適用於拼接相對url地址的連接上
27. 列表生成式
在遇到先初始化空列表,再append值的這種情況,通常用列表生成式能同樣解決!
28. Python合併列表的列表
方法一:
list = [['aa', 'bb'], ['cc', 'dd']]
print ([j for i in list for j in i])
------------------------
['aa', 'bb', 'cc', 'dd']
方法二:
print (sum(list,[]))
------------------------
['aa', 'bb', 'cc', 'dd']
方法三:
["".join(i) for i in list]
29. Python合併列表的字符串
list = ['a','b','c']
"".join(list)
30. 列表去掉最後一個元素
list = [1,2,3,4,5,6]
a = list[:-1]
31.python去除字符串中間空格的方法
1、使用字符串函數replace
a = 'hello world'
a.replace(' ', '')
'helloworld'
2、使用字符串函數split
a = ''.join(a.split())
print(a)
helloworld
32.字符串String去除換行符和空格(\n,\r)
data = data.replace('\n','').replace('\t','')
33.合併字典
- 藉助dict(d1.items() + d2.items())的方法
- 藉助字典的update()方法
- 藉助字典的dict(d1, **d2)方法
34.將兩個list拼接成字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print dictionary
"""
輸出:
{'a': 1, 'c': 3, 'b': 2}
"""
35.去掉列表中的空格及\n
params_basic = [param.strip() for param in params_basic_raw]
params_basic = list(filter(lambda a: a != '', params_basic))
36.字典的提取key,value,並使其對應
replace_dict = {'\\x3C': '<','\\x5C': '\\','\\x2F': '/','\\x22': '"','\\x3E': '>'}
# 遍歷字典相當於是遍歷字典的鍵
for replace_key in replace_dict:
resp_text = resp_text.replace(replace_key, replace_dict[replace_key])
37.變量命名注意規範,如果用於全局就用大寫,單詞之間分隔用下劃線’_’
38. set的用法
如果不用set,之前是這樣:
if jd_goods_parameter.get('認證型號') == '認證型號' or \
jd_goods_parameter.get('認證型號') == '|' or \
jd_goods_parameter.get('認證型號') == '.' or \
用set,直接用in判斷更簡潔,且效率更高:
if jd_goods_parameter.get('認證型號') in set(['|','.','-','..']):
print('|' in x)
39.同一個變量如果是多次調用,則可以使其變爲類變量來使用,而不用實例變量;
40.去掉所有的空值
params_basic = [x for x in params_basic if x != '']
41.生成器表達式讀取大規模文件
def myreadlines(f, newline):
# 定義緩存
buf = ""
while True:
while newline in buf:
pos = buf.index(newline)
yield buf[:pos]
buf = buf[pos + len(newline):]
chunk = f.read(4096)
if not chunk:
#說明已經讀到了文件結尾
yield buf
break
buf += chunk
with open("input.txt") as f:
for line in myreadlines(f, "{|}"):
print (line)
42.遍歷列表的值時用複製,而不要用原值
使用 [row[:] for row in list2d] ,而不要用:[row for row in list2d]
因爲list2d是一個外面的用戶傳來的引用。如果直接使用list2d,
而不進行復制的話,外面的用戶如果修改這個list2d,將直接改變我們的矩陣中的數據:
比如,
A = [[1, 2], [3, 4]] # 聲明一個二維列表
M = Matrix(A) # 用這個二維列表實例化一個矩陣類
print(M) # 可以打印M看一看:)
A[0][0] = 666 # 可能由於某種原因,對於二維列表中的值進行了修改
# 但注意,此時我們沒有對M做修改
print(M) # 你會發現,M也變了,這不是我們想要的結果
而當我們換回 self._values = [row[:] for row in list2d],此時,M就不會隨着外部的改變而改變了。
43.python2強制轉換py3的輸出
首先我們需要明白該句語句是python2的概念,那麼python3對於python2就是future了,也就是說,在python2的環境下,超前使用python3的print函數。
相當於把下一個新版本的新特性導入到當前版本
from __future__ import print_function
44.maketrans()方法實現要轉換的映射:
通過str.maketrans()方法先實現轉換,再通過translate方法對原字符串進行替換
def replace(text):
intab = ",?!"
outtab = ",?!"
deltab = ")(+_-.>< "
trantab=text.maketrans(intab, outtab,deltab)
return text.translate(trantab)
Python中的maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,
maketrans(intab, outtab, delchars)
第一個參數表示需要轉換的字符,屬於字符串類型;
第二個參數表示轉換的目標,也屬於字符串類型;
第三個參數是可選參數delchars,可選參數,表示要刪除的字符組成的字符串
注:兩個字符串的長度必須相同,爲一一對應的關係。