栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python小技巧合集

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python小技巧合集

列表内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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/223274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号