python标准库(二)

格式化输出

  • reprlib 库用来格式化
>>> import reprlib
>>> reprlib.repr(set('aabbccddeeeff'))
"{'a', 'b', 'c', 'd', 'e', 'f'}"
>>>
  • 对集合能排序
>>> reprlib.repr(set('fdajfejaa'))
"{'a', 'd', 'e', 'f', 'j'}"
>>>
  • pprint库用来缩进和空行,输出的内置对象和用户自定义对象能被解释器直接读取。
>>> p = [[['red', 'yellow'], ['pink']], ['black'], 'blue']
>>> pprint.pprint(p, width=5)
[[['red','yellow'],['pink']],['black'],'blue']
>>>
  • textwrap用来格式化段落
>>> import textwrap as tw
>>> doc = ''' she is so gorgeous! I really like her !
...     May the distance between her want and I am weak .
...     Try Hard... Learning your all time... aseert...'''
>>> print(tw.fill(doc, width=40)) # 每行40个字母she is so gorgeous! I really like her !
May the distance between her want and I
am weak .         Try Hard... Learning
your all time... aseert...
>>>
  • Locale 模块处理与特定地域相关的数据格式。
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'English_United States.1252')
'English_United States.1252'
>>>
>>> conv = locale.localeconv()
>>> conv
{'int_curr_symbol': 'USD', 'currency_symbol': '$', 'mon_decimal_point': '.', 'mon_thousands_sep': ',', 'mon_grouping': [3, 0], 'positive_sign': '', 'negative_sign': '-', 'int_frac_digits': 2, 'frac_digits': 2, 'p_cs_precedes': 1, 'p_sep_by_space': 0, 'n_cs_precedes': 1, 'n_sep_by_space': 0, 'p_sign_posn': 3, 'n_sign_posn': 0, 'decimal_point': '.', 'thousands_sep': ',', 'grouping': [3, 0]}
>>>
>>> x = 12345.6
>>> locale.format_string("%d", x, grouping =True) # 对数字进行分隔
'12,345'
>>> locale.format_string("%s%*.f", (conv['currency_symbol'], conv['frac_digits'], x), grouping=True)
'$12,346'

模块

  • string模块的Template 类

    用于格式化的 占位符($(字母,数字,下划线)) $ + 标识符 , 如果在外面加上{} 后面可直接跟字母,数字(不用空格)。


T = Template('${k}like $kk')
T.substitute(k='', kk='')
	>>> from string import Template # 导入摸板>>> t = Template('${she} is so $how')  # $加标识符表示占位>>> t.substitute(she='she', how='adorable') # 把占位符给替换了'she is so adorable'>>># 如果,参数不完整>>> t = Template('return the $item to $owner')>>> t.substitute(dict(item='unladen swallow')) # 未提供 owner的参数Traceback (most recent call last):File "<stdin>", line 1, in <module>File "D:\softWare\python\python3.7\lib\string.py", line 132, in substitutereturn self.pattern.sub(convert, self.template)File "D:\softWare\python\python3.7\lib\string.py", line 125, in convertreturn str(mapping[named])KeyError: 'owner'>>># 用户也可能出现上面滴参数不完整情况 用safe_substitute>>> t.safe_substitute(dict(item='unladen swallow'))'return the unladen swallow to $owner'>>>
  • 对浏览器照片重命名
	>>> import time, os.path>>> photofiles = ['img_102.jpg', 'img_104.jpg', 'img_106.jpg']>>> class BatchRename(Template): # 继承模板类...     delimiter = '%'...>>> fmt = input('输入重命名的样式(%d-date %n-sequm %f-format): ')输入重命名的样式(%d-date %n-sequm %f-format): lel_%n%f>>> fmt'lel_%n%f'>>> br = BatchRename(fmt)>>> date = time.strftime('%d%b%y')>>> date'13May20'>>> for i, filename in enumerate(photofiles):...     base, ext = os.path.splitext(filename)...     newname = br.substitute(d=date, n=i, f=ext)...     print('{0} --> {1}'.format(filename, newname))...img_102.jpg --> lel_0.jpgimg_104.jpg --> lel_1.jpgimg_106.jpg --> lel_2.jpg>>>

多线程

  • 线程是一种对于非顺序依赖的多个任务进行解耦的技术。
  • 多线程可以提高应用的响应效率 当接收用户输入的同时,保持其他任务在后台运行。
  • 应用场景,将i/o 和 计算运行在两个并行的线程中。
import zipfile, threadingclass AsyncZip(threading.Thread):def __init__(self, infile, outfile): # 构造输入输出文件threading.Thread.__init__(self)self.infile = infileself.outfile = outfiledef run(self):f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED) # 打开文件只写f.write(self.infile) # 压缩文件f.close()print('完成后台压缩...', self.infile)# 测试
background = AsyncZip('e:/MyStudy/bitQianBlog/python/pythonBasic/StandLib/test.txt', 'output.zip')
background.start()print('主程序后台运行中...')background.join() # 等待后台任务完成...print('主程序一直等待后台任务完成...')

  • 日志记录 – logging模块
>>> import logging as log # 日志记录模块
>>> log.debug('解决bug信息...')
>>> log.info('消息')
>>> log.warning('警告, 配置文件%s找不到', 'server.conf')
WARNING:root:警告, 配置文件server.conf找不到
>>> log.error('存在错误')
ERROR:root:存在错误
>>> log.critical('判定错误 -- 关机')
CRITICAL:root:判定错误 -- 关机
>>>

弱引用weakdef

  • py 会自动进行内存管理(garbage collection)。
  • 当某个对象的最后一个引用被移除后 不久就会释放所占的内存。
  • weakdef 可以不创建引用,就可跟踪其它对象。
  • 当对象不再需要时,它将自动从一个弱引用表中被移除,并为弱引用对象触发一个回调。
  • 典型应用包括对创建开销较大的对象进行缓存:
import weakref, gc
class A:def __init__(self, value):self.value = valuedef __repr__(self):return str(self.value)a = A(10) # 创建一个引用
d = weakref.WeakValueDictionary()
d['primary'] = a
print(d['primary']) # 10del a # 移除引用print(gc.collect()) # 0print(d['primary']) # KeyError: 'primary'
  • 用于操作列表的工具
	array模块提供的array()对象,类似列表,但只储存一种数据类型>>> # 以两个字节为存储单元的无符号d二进制数值的数组(类型码为 'H')>>> from array import array>>> a = array([1, 2, 3, 4])Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: array() argument 1 must be a unicode character, not list>>> a = array('H', [1, 2, 3, 4])>>> sum(a)10>>> a[0:2]  # 切片array('H', [1, 2])>>>>>> aarray('H', [1, 2, 3, 4])collections 的 deque() 对象 队列,增删快,查找慢>>> from collections import deque>>> d = deque(['a', 'b', 'c', 'd'])>>> d.append('e')>>> ddeque(['a', 'b', 'c', 'd', 'e'])>>> print('出队, ', d.popleft())出队,  a>>> ddeque(['b', 'c', 'd', 'e'])bisect(平分,二等分)模块操作排序列表的函数>>> import bisect as bi>>> scores = [(100, 'ruby'), (200, 'python'), (400, 'java'), (500, 'c')]>>> bi.insort(scores, (300, 'javascript')) # 按分数排序>>> scores[(100, 'ruby'), (200, 'python'), (300, 'javascript'), (400, 'java'), (500, 'c')]heapq 模块 基于列表来实现堆函数。 你可选择性的排序你要的列表。>>> from heapq import heapify, heappop, heappush>>> data = [2, 1, 4, 7, 5, 0, 9, 8, 3, 6]>>> heapify(data) # 按堆顺序重新排列列表>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> heappush(data, -1) # 添加-1>>> data[-1, 0, 2, 3, 1, 4, 9, 8, 7, 6, 5]>>> heappop(data) # 移除-1-1>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> [heappop(data) for i in range(3)] # 从堆中移除前三个数[0, 1, 2]>>> data[3, 5, 4, 6, 8, 7, 9]

decimal模块

• 财务应用和其他需要精确十进制表示的用途,
• 控制精度,
• 控制四舍五入以满足法律或监管要求,
• 跟踪有效小数位,或
• 用户期望结果与手工完成的计算相匹配的应用程序。

  • 用decimal计算,和直接计算
	>>> round(Decimal('0.70') * Decimal('1.05'), 2)Decimal('0.74')>>>>>> round(0.70 * 1.05, 2)0.73
  • 对比float的浮点运算 和 比较
	>>> Decimal('1.00') % Decimal('0.10')Decimal('0.00')>>>>>> 1.00 % 0.100.09999999999999995>>>>>> sum([Decimal('0.1')*10]) == Decimal('1.0')True>>> s = sum([0.1] * 10)>>> s0.9999999999999999>>> s == 1.0False
  • decimal提供的精度
	>>> getcontext().prec = 36>>> Decimal(1) / Decimal(7)Decimal('0.142857142857142857142857142857142857')

ps:学习笔记。请看:
python标准库(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

templates(0.1)

每一位 C 程序员都有自己的一套编程风格。这就引来了各种问题&#xff1a;哪儿应该 插入空白符号、怎么摆放分隔符&#xff08;大括号、小括号&#xff09;…等等。我们尽量保持全书风格一致&#xff0c; 当然有时候我们也对特殊问题作出让步。例如在教本&#xff08;初阶&…

实验4 进程运行轨迹的跟踪与统计

进程运行轨迹的跟踪与统计 难度系数&#xff1a;★★★☆☆ 实验目的 掌握Linux下的多进程编程技术&#xff1b;通过对进程运行轨迹的跟踪来形象化进程的概念&#xff1b;在进程运行轨迹跟踪的基础上进行相应的数据统计&#xff0c;从而能对进程调度算法进行实际的量化评价&…

虚拟环境创建,pip管理包

windows10虚拟环境的创建&#xff0c;pip管理包1.虚拟环境的创建1.1 为什么要创建虚拟环境1.2 创建虚拟环境1.3 激活虚拟环境1.3.1 激活方式1.3.2 检查是否创建成功2.用pip管理包2.1 pip的基本使用2.2 pip创建安装的文件requirements.txt2.3 安装包对应的版本2.4 用pip - r ins…

Linux C编程一些优秀的博客链接

1&#xff0c;C进程内存分布 https://www.cnblogs.com/fengyv/p/3789252.html 2&#xff0c;fork入门讲解 http://blog.csdn.net/jason314/article/details/5640969

vi文字处理器

http://blog.csdn.net/wangloveall/article/details/22649331 摘要&#xff1a;vi是类UNIX命令行接口的标准文字处理软件&#xff0c;也是进行shell脚本程序编写与服务器设置的非常重要的工具。本文介绍vi文字处理器&#xff0c;包括vi简介、vi怎么使用、vi的加强版vim。 关键词…

顺序栈,链栈

栈与链栈一&#xff0c;顺序栈1.1 IStack栈接口1.2&#xff0c;顺序栈增删改查的实现1.3&#xff0c;测试顺序栈二&#xff0c;链栈2.1&#xff0c;存放数据的结点2.2&#xff0c;链栈的实现2.3测试链栈一&#xff0c;顺序栈 1.1 IStack栈接口 public interface IStack {publ…

Ubuntu14.04LTS打造实用的环境

1&#xff0c;安装Ubuntu14.04LTS以后&#xff0c;首先要更新一下源&#xff0c;下面使用163源&#xff1a; 首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup清空原来的/etc/apt/sources.list&#xff0c;添加网易的源列表 deb http://mirrors.…

用numpy,matplotlib库画笛卡尔爱心曲线

1650年&#xff0c;斯德哥尔摩的街头&#xff0c;52岁的笛卡尔邂逅了18岁的瑞典公主克里斯汀。   那时&#xff0c;落魄、一文不名的笛卡尔过着乞讨的生活&#xff0c;全部的财产只有身上穿的破破烂烂的衣服和随身所带的几本数学书籍。生性清高的笛卡尔从来不开口请求路人施舍…

poj 1715 Hexadecimal Numbers 排列组合

1 /**2 大意&#xff1a; 给定16进制数的16个字母&#xff0c;&#xff0c;求第k大的数&#xff0c;&#xff0c;要求数的长度最大为8.&#xff0c;并且每个数互不相同。3 思路&#xff1a; 从高到低挨个枚举&#xff0c;每一位能组成的排列数 &#xff0c;拿最高位来说&#x…

centos7虚拟机共享本机磁盘的方法

说明&#xff1a;这个方法不一定是通用的&#xff0c;也可能不是最快捷的&#xff0c;但是感觉比较稳妥的办法。 1&#xff0c;首先坚持两个进程是否启动&#xff1a;右击&#xff1a;我的电脑-管理-服务&#xff0c;检查server服务和Workstation服务是否启动。如果没有启动&a…

文件读写的“二进制模式”和“文本模式”

二进制模式&#xff1a;将内存中的数据&#xff08;01序列&#xff09;直接传送到文件中&#xff0c;没有任何转换。如&#xff1a;char ch 0x7d; fwrite(&ch, sizeof(char), 1, pfile);直接把0x7d这个01序列存储到文件中。文本模式&#xff1a;将内存中的数据&#xff08…

服务器小程序servlet的使用

servlet的创建使用一&#xff0c;三种创建方式1.1 实现servlet接口1.2 继承GenericServlet1.3 继承HttpServlet二&#xff0c;servlet使用2.1 web.xml文件的配置2.1.1 创建xml文件2.1.2 手写web.xml文件2.2 在8080端口下访问2.2.1 servlet的生命周期servlet是服务器小程序。是个…

hadoop MultipleInputs fails with ClassCastException (get fileName)

来自&#xff1a;http://stackoverflow.com/questions/11130145/hadoop-multipleinputs-fails-with-classcastexception Following up on my comment, the Javadocs for TaggedInputSplit confirms that you are probably wrongly casting the input split to a FileSplit: /**…

自己常用的Linux命令总结

原则&#xff1a;自己使用过的&#xff0c;不易记忆的&#xff0c;功能强大的 grep 名称意义&#xff1a;全称Global Regular Expression Print&#xff0c;表示全局正则表达式是一个强大的文本搜索工具&#xff0c;采用正则匹配命令格式&#xff1a;grep [options] files O…

XSS与CSRF两种跨站攻击比较

XSS&#xff1a;跨站脚本&#xff08;Cross-site scripting&#xff09; CSRF&#xff1a;跨站请求伪造&#xff08;Cross-site request forgery&#xff09; 在那个年代&#xff0c;大家一般用拼接字符串的方式来构造动态SQL 语句创建应用&#xff0c;于是SQL 注入成了很流行的…

褚时健:现在的年轻人太急了,我快90了还在摸爬滚打

转自&#xff1a;http://news.163.com/17/0715/08/CPCF0D6R00018AOR.html &#xff08;本人说明&#xff1a;这篇访谈太“鸡汤”了&#xff0c;我读了好几遍&#xff0c;里面精彩的部分我用红字标出来了&#xff0c;感觉褚时健老前辈的精神和做事的态度方法真的值得学习&#…

Java日期格式化SimpleDateFormat

package test;import java.text.SimpleDateFormat; import java.util.Date;public class TestDate {public static void main(String[] args) {// 大写的HH是24小时 小写的是12小时SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d null;…

VS或编译的时候不生成Release文件夹

今天在编译第三方类的时候&#xff0c;总是发布的时候报没有第三方类库的的Release版本 解决方案&#xff1a; Build>Configuration Manager>Release 编译》配置管理》选择发布版本 再编译就有了转载于:https://www.cnblogs.com/flyfish2012/p/3728516.html