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,可选参数,表示要删除的字符组成的字符串
注:两个字符串的长度必须相同,为一一对应的关系。