ITPub博客

首页 > IT职业 > IT生活 > Python小技巧合集

Python小技巧合集

IT生活 作者:kalt 时间:2021-09-09 10:05:15 0 删除 编辑

列表内for循环简写

[x for x in range(1,10)]得到[1, 2, 3, 4, 5, 6, 7, 8, 9]
可以结合下划线只取元组列表的第n个元素:

a=[('a',1),('b',2)]
c=[c for c,_ in a]print(c)

输出['a', 'b']

zip

将两个列表合并为一个元组列表:

a=['a','b']
b=[1,2]
c=zip(a,b)for m in c:    print(m)

输出('a', 1)('b', 2)

两个列表同步排序

先合并成元组列表,然后用sorted解决:

keywords=['c','a','b']
weights=[3,2,1]
comb=zip(keywords,weights)def comp(item):
    return item[1]
comb=sorted(comb,key=comp)for o in comb:
    print('>>',o)

输出

321>> ('b', 1)>> ('a', 2)>> ('c', 3)

lambda

lambda 参数:返回值,对应于def hanshu(参数):return 返回值这样的格式。

def comp(item):
     return item[1]
comb=sorted(comb,reverse=True,key=comp)

合并为

comb=sorted(comb,reverse=True,key=lambda k:k[1])

无法替换去除的空格

str.replace(str1,str2,max)官方说明就这么多,str1和str2只能是字符串,不能用正则。
有时候replace怎么也去不掉某些空格,这是因为空格有很多种,除了一般的' '还有'xa0'。

repr是替换掉反引号,反引号就是键盘左上角波浪键~下面那个,用repr可以打印出字符串的本来面貌,把xa0`原样打印出来。

import re
s='AA xa0BB'print(s)
print(repr(s))
print(s.replace(' ',''))
print(s.replace(' ','').replace('xa0',u''))
print(re.sub('s+','',s))

输出的结果是:


图片描述

image.png


从上面看到,re.sub还是很强大的,可以把各种空格都当做s来替换,+是数量表示一个或多个,就是不管多少个空格和xa0都会被一个s+都替代。但是正则表达式re比较麻烦,不推荐使用。

遇到类似问题的解决思路是:用repr把它打印出来,看看都是什么,然后逐个replace。

格式化输出对象

可以利用json.dumps(obj,indent=2,ensure_ascii=False)来把一个对象、dict漂亮整齐的打印出来

import json
obj={    'a':1,    'b':{        'b1':11,        'b2':22,
    }
}
s=json.dumps(obj, indent=2,ensure_ascii=False)
print(s)

得到结果:


图片描述

image.png

repr(s)字符串表示

只是用来开发和debug用的,没什么实际意义。

s='hello'n=9/5print(s,n)print(repr(s),repr(n))

输出只是差个引号:

hello 1.8'hello' 1.8

网页数据导致的乱码

如果html页面header里面没有包含编码格式,那么BeautifulSoup就会当做网页默认编码'ISO-8859-1'来处理,导致乱码。
解决办法就是重新编码再解码成'gbk'中文字符:

s='ËÕÖÝÇàÌìÍøÂç¿Æ¼¼ÓÐÏÞ¹«Ë¾'s=s.encode('ISO-8859-1').decode('gbk')print(s)

输出中文名。

检测文件是否存在

from os.path import existsif exists('c.txt'):    with open('c.txt','a') as f:
        f.write('exist') 
        f.close()else:    with open('c.txt','a') as f:
        f.write('none')
        f.close()

将时间戳数字转换成日期小时

time.time()获取当前时间戳。
datetime.datetime.fromtimestamp(tm)将数字转化为日期对象
strftime转化为可读字符串,YmdHMS年月日时分秒

import time,datetime
tm=int(time.time())
s=datetime.datetime.fromtimestamp(tm).strftime('%Y-%m-%d %H:%M:%S')
print(s)

输出:2018-10-09 07:48:52

字符串转为字典对象

适用于复制出来的headers

def str2obj(s, s1=';', s2='='):
    li = s.split(s1)
    res = {}    for kv in li:
        li2 = kv.split(s2)        if len(li2) > 1:
            res[li2[0]] = li2[1]    return res
headerstr='''
a: 111
b: 333
ccc
'''headers = str2obj(headerstr, 'n', ': ')
print(headers)

输出:{'a': '111', 'b': '333'}



作者:zhyuzh3d
链接:https://www.jianshu.com/p/62398aa5c5c2


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1805/viewspace-2816032/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-15

  • 博文量
    121
  • 访问量
    892