python stringstrip方法详解_Python 的技巧和方法你了解多少?

学了这些你的python代码将会改善,你的技巧将会提高。

进群:943752371可以获取各类Python学习资料+视频资料+各类安装教程

路径操作

比起os模块的path方法,python3标准库的pathlib模块的Path处理起路径更加的容易。

获取当前文件路径

前提导入os和pathlib包。。

os版:

print(os.path.dirname(file))

print(os.getcwd())

复制代码

pathlib版:

print(pathlib.Path.cwd())

复制代码

看着好像没啥区别,然后看下面这个。

获取上两级文件目录

os版

print(os.path.dirname(os.path.dirname(os.getcwd())))

复制代码

pathlib版

print(pathlib.Path.cwd().parent.parent)

复制代码

拼接路径

os版

print(os.path.join(os.path.dirname(os.path.dirname(os.getcwd())),”yamls”,”a.yaml”))

复制代码

pathlib版

parts=[“yamls”,”a.yaml”]

print(pathlib.Path.cwd().parent.parent.joinpath(*parts))

复制代码

运行时拼接路径

os版

os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(file))), ‘yamls’,f'{site_name}.yaml’)

复制代码

pathlib版

parts=[“yamls”,”a.yaml”]

print(pathlib.Path(file).resolve().parent.parent.joinpath(*parts))

复制代码

另外pathlib生成的是个对象,在open文件操作中可以直接运行的但是如果当作字符串操作会出现错误,此时需要对其进行转换,使用os.fspath()即可,不过一般很少有操作路径字符串的习惯。

综合起来,还是pathlib拼接路径方便。

保存标准格式的yaml文件

编程免不了要写配置文件,怎么写配置也是一门学问。

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

YAML在python语言中有PyYAML安装包。

前提安装第三方库

pip install pyaml

pip install ruamel.yaml

复制代码

关于yaml的读取知识网上一堆了我就不说了,这里主要说写入。

from ruamel import yaml

data={“age”:23,”sex”:”男”,”name”:”牛皮”}

with open(conf_file, “w”, encoding=’utf-8′) as fs:

yaml.dump(data, fs, Dumper=yaml.RoundTripDumper, allow_unicode=True)

复制代码

yaml写文件和json一样也是使用dump。

同时迭代两个列表

以前的时候我是这么解决的

a = [“a”, “b”, “c”, “d”]

b = [1, 2, 3] # 空的补充None

for index, a_item in enumerate(a):

b_item = None

if len(b) – 1 <= index:

pass

else:

b_item = b[index]

print({a_item:b_item})

复制代码

现在我通过itertools标准库的zip升级版zip_longest解决,可以通过fillvalue参数补充缺失值。当然如果比较的元素个数相同可以直接用zip。

from itertools import zip_longest

a = [“a”, “b”, “c”, “d”,”e”]

b = [1, 2, 3] # 空的补充None

for a_item, b_item in zip_longest(a,b,fillvalue=0):

print({a_item:b_item})

复制代码

三元表达式还能这么用?

一般的我们这样写

a=”hello” if 2>1 else “bye”

print(a)

复制代码

我们知道python中false实际式0,true是1,所以对于上面的式子我们就可以这么写了。

a=[“hello”,”bye”][2<1]

print(a)

复制代码

因为2<1是false也就是0,所以输出了第一个元素hello。

5.简单的类使用namedtuple代替

先来一个简单的例子

import collections

Person=collections.namedtuple(‘Person’,’name age’)

如果使用python中的关键字会出现错误,此时使用rename字段。

按照元素在元组中的下标赋值。class就是_2,def是_3

Person = collections.namedtuple(‘Person’, [‘name’, ‘age’, ‘class’, ‘def’, ‘name’, ‘name’], rename=True)

p = Person(name=’lisa’, age=’12’, _2=”class2″, _3=”def”, _4=”name2″, _5=”name3″)

print(p)

如果出现相同的字段第二次出现的时候也是用其下标,参考上面的例子。

fields查看字段名,可以发现内置模块和重复的字段标记为加下标的形式

print(p._fields)

使用_asdict将namedtuple转为OrderedDict。

od = p._asdict()

print(od)

然后可以转为字典

print(dict(od))

_replace()方法构建一个新实例,因为namedtuple是不可变类型所以这个方法可以返回一个新的对象。

new_p = p._replace(name=”samJ”)

print(new_p)

print(new_p is p) # 可以看到不是同一个对象。

复制代码

一个实用的例子pyppeteer的例子感受下

import asyncio

import pyppeteer

from collections import namedtuple

Response = namedtuple(“rs”, “title url html cookies headers history status”)

async def get_html(url, timeout=30):

# 默认30s

browser = await pyppeteer.launch(headless=True, args=[‘–no-sandbox’])

page = await browser.newPage()

res = await page.goto(url, options={‘timeout’: int(timeout * 1000)})

data = await page.content()

title = await page.title()

resp_cookies = await page.cookies()

resp_headers = res.headers

resp_history = None

resp_status = res.status

response = Response(title=title, url=url,

html=data,

cookies=resp_cookies,

headers=resp_headers,

history=resp_history,

status=resp_status)

return response

loop = asyncio.get_event_loop()

results = loop.run_until_complete(asyncio.gather(*task))

for res in results:

print(res.title)

复制代码

6 使用枚举让数字变得更易懂。

import enum

枚举

@enum.unique

class Sex(enum.Enum):

man = 12

woman = 13

# 因为加了唯一值的装饰器所以下面添加属性会报错

# boy=12

print(Sex.man.name)

print(Sex.woman.value)

遍历

for item in Sex:

print(item.name)

print(item.value)

print(“-” * 40)

其他使用方式

words = enum.Enum(

value=’item’,

names=(‘a b c d e f’),

)

输出元素c,必须是上面names里含有的值

print(words.c)

print(words.f)

因为names不含有w所以报错

try:

print(words.w)

except AttributeError as e:

print(e.args)

print(“-” * 40)

for word in words:

print(word.name, word.value) # 默认赋值为、从1开始自增。

print(“-” * 40)

如果自定义元素的值啧改为一下元组的形式

words2 = enum.Enum(

value=’item2′,

names=[(‘a’, 23), (‘b’, 56), (“c”, 12), (“d”, 333)]

)

for word2 in words2:

print(word2.name, word2.value)

复制代码

7 链式合并字典chainmap的使用

from collections import ChainMap

ChainMap

d1 = {‘a’: 1, ‘b’: 2}

d2 = {‘a2’: 3, ‘b2’: 4}

d3 = {‘a3’: 5, ‘b3’: 6}

d4 = {‘a4’: 7, ‘b4’: 8}

c = ChainMap(d1, d2, d3, d4) # 多个字典合并为一个

for k, v in c.items():

print(k, v)

print(c.maps) # 要搜索的索引列表

c.maps = list(reversed(c.maps)) # 逆转映射列表

print(c)

因为c和d1-d4对应的索引位置实际是一个所以,修改c的时候会影响到d1到d4其中饿的一个值,同理修改

d1-d4的时候也会影响到c。

所以使用new_child创建一个新的映射。再修改就影响不到底层的数据了。

c2 = c.new_child()

c2[“a4”] = 100

print(c)

print(c2)

输出发现c的值没有发生变化,只要c2变化。

d5 = {“a5”: 34, “b5”: 78}

c2 = c2.new_child(d5) # 可以在原来的映射基础上添加新的映射

print(c2)

复制代码

8 在不打乱列表顺序的基础上插入元素

import bisect

“””

bisect 模块,用于维护有序列表。

bisect 模块实现了一个算法用于插入元素到有序列表。

在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。

Bisect 是二分法的意思,这里使用二分法来排序,它会将一个元素插入到一个有序列表的合适位置,

这使得不需要每次调用 sort 的方式维护有序列表。

“””

values = [14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 77, 1]

print(“New Pos Content”)

print(“— — ——-“)

l = []

for i in values:

postion = bisect.bisect(l, i) # 返回插入的位置

bisect.insort(l, i) # 等于insort_right

print(‘{:3}{:3}’.format(i, postion), l)

“””

Bisect模块提供的函数有:

bisect.bisect_left(a,x, lo=0, hi=len(a)) :

查找在有序列表 a 中插入 x 的index。lo 和 hi 用于指定列表的区间,默认是使用整个列表。如果 x 已经存在,在其左边插入。返回值为 index。

bisect.bisect_right(a,x, lo=0, hi=len(a))

bisect.bisect(a, x,lo=0, hi=len(a)) :

这2个函数和 bisect_left 类似,但如果 x 已经存在,在其右边插入。

bisect.insort_left(a,x, lo=0, hi=len(a)) :

在有序列表 a 中插入 x。和 a.insert(bisect.bisect_left(a,x, lo, hi), x) 的效果相同。

bisect.insort_right(a,x, lo=0, hi=len(a))

bisect.insort(a, x,lo=0, hi=len(a)) :

和 insort_left 类似,但如果 x 已经存在,在其右边插入。

Bisect 模块提供的函数可以分两类: bisect* 只用于查找 index, 不进行实际的插入;

而 insort* 则用于实际插入。该模块比较典型的应用是计算分数等级:

“””

复制代码

8 关于字典的逻辑运算你了解多少

使用&操作符查看字典的相同之处

字典键支持常见的集合操作,并集交集差集。

a = {‘x’: 1, ‘y’: 2, ‘z’: 3}

b = {‘w’: 2, ‘z’: 4, ‘x’: 3, ‘z’: 3}

获取相同的键

c = a.keys() & b.keys()

print(c)

获取相同的键值对

d = a.items() & b.items()

print(d)

创建一个新的字典并删除某些键

e = {k: a[k] for k in a.keys() – {‘z’, ‘x’}}

print(e)

复制代码

9 给切片起个名字

a=”safr3.14″

print(a[-4:])

上面可以改为

pie=slice(len(a)-4,len(a))

print(a)

复制代码

10 获取出现频率高的元素

from collections import Counter

text = “abcdfegtehto;grgtgjri” # 可迭代对象

lis = [“a”, “c”, “d”, “t”, “b”]

dic = {“a”: 1, “b”: 4, “c”: 2, “d”: 9} # 字典也可以

c = Counter() # 可以定义空容器然后update

c.update(text)

c2 = Counter()

c2.update(dic)

c3 = Counter(lis) # 也可以直接传入对象

print(c)

print(c2)

print(c3)

使用c.most_comman(n)获取前n出现频率最高的元素,列表元组类型

print(c.most_common(4))

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值