Pythonic骚操作知识点总结(持续更新)

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'

f-strings的详细介绍

12.字符串与json格式的转换

字符串与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保存图片文件及检查图片文件写入成功

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.合并字典

  1. 借助dict(d1.items() + d2.items())的方法
  2. 借助字典的update()方法
  3. 借助字典的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,可选参数,表示要删除的字符组成的字符串
注:两个字符串的长度必须相同,为一一对应的关系。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章