原文 http://blog.csdn.net/jclass/article/details/6145078

一. base64 编码和解码任意的二进制字符串到文本字符串(主要用在HTTP EMAIL URL等 )
官方帮助文档原文:This module provides data encoding and decoding as specified in RFC 3548.
This standard defines the Base16, Base32, and Base64 algorithms for encoding and decoding arbitrary binary strings
into text strings that can be safely sent by email, used as parts of URLs, or included as part of an HTTP POST request

>>> import base64  
>>> base64.encode(open("D:/xda1.txt","rb"),open("D:/text2.txt","wb")) #将xda1.txt文件编码并保存到text2.txt
>>> base64.decode(open("D:/text2.txt","rb"),open("D:/text3.txt","wb"))#将text2.txt文件解码并保存到xda1.txt
>>> mm = base64.encodestring(b"mima ")
>>> mm
b'bWltYSA=/n'
>>> dd = base64.decodebytes(mm)
>>> dd
b'mima '
>>> base64.b64encode(b"mima ")
b'bWltYSA='
>>> base64.b64decode(mm)
b'mima '

二. 3.1中marshal与pickle都能存取compile的Code对象
官方文档中不建议使用marshal:This is not a general “persistence” module.

>>> s = """ 
print('hello')
"""
>>> exec(compile(s,"","exec")) #直接执行
hello
>>> import marshal #marshal存取
>>> data = marshal.dumps(compile(s,"","exec"))
>>> repr(data)
"b'c//x00//x00//x00//x00//x00//x00//x00//x00//x00//x00//x00//x00//x02//x00//x00//x00@//x00//x00//x00s//x0e//x00//x00//x00e//x00//x00d//x00//x00//x83//x01//x00//x01d//x01//x00S(//x02//x00//x00//x00u//x05//x00//x00//x00helloN(//x01//x00//x00//x00u//x05//x00//x00//x00print(//x00//x00//x00//x00(//x00//x00//x00//x00(//x00//x00//x00//x00u//x00//x00//x00//x00u//x08//x00//x00//x00<module>//x02//x00//x00//x00s//x00//x00//x00//x00'"
>>> exec(marshal.loads(data))
hello
>>> import pickle #pikle存取 调用都一样
>>> data1 = pickle.dumps(compile(s,"","exec"))
>>> data1
b'/x80/x03cidlelib.rpc/nunpickle_code/nq/x00Cqc/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x02/x00/x00/x00@/x00/x00/x00s/x0e/x00/x00/x00e/x00/x00d/x00/x00/x83/x01/x00/x01d/x01/x00S(/x02/x00/x00/x00u/x05/x00/x00/x00helloN(/x01/x00/x00/x00u/x05/x00/x00/x00print(/x00/x00/x00/x00(/x00/x00/x00/x00(/x00/x00/x00/x00u/x00/x00/x00/x00u/x08/x00/x00/x00<module>/x02/x00/x00/x00s/x00/x00/x00/x00q/x01/x85q/x02Rq/x03.'
>>> exec(pickle.loads(data1))
hello
>>> type(data)
<class 'bytes'>
>>> type(data1)
<class 'bytes'>

三.array操作

>>> from array import array
>>> array('u','abcdazx') #字符串
array('u', 'abcdazx')
>>> a.append('c') #注意:只能一次添加一个字符
>>> a.tolist() #将array转换为一样项的普通列表('u'转成字符串列表,'b'转成数字列表)
['a', 'b', 'c', 'd', 'a', 'z', 'x', 'c']
>>> a.tounicode()#将array转换为字符串
'abcdazxc'
>>> a.tostring() #输出字节的串
b'a/x00b/x00c/x00d/x00a/x00z/x00x/x00c/x00'
>>> b= array('b',b'abcdazx')#字节的串
>>> b
array('b', [97, 98, 99, 100, 97, 122, 120])
>>> b = array('b',b'z') #单个字节
>>> b
array('b', [122])#ASCII编码值
>>> b.tostring() #将ASCII编码值还原为原始值
b'z'
>>> array('i',[1]).tostring() #整数
b'/x01/x00/x00/x00'
>>> array('i',[1]).tostring()[0]
1
>>> array('i',[1]).tostring()[1]
0

四. py_compile编译单个py文件为pyc字节码文件
如果不指定保存的文件(compile第二参数),则将编译好的字节代码文件保存到py同一目录。
compileall 模块使用compileall.compile_dir()可以把一个目录树下的所有 Python 文件编译为字节代码.

>>> import py_compile  
>>> py_compile.compile("E:/Python/ProjecQt/test.py") #生成test.pyc文件

五. linecache从源文件中读取代码(并缓存)

>>> import linecache  
>>> #test.py 只有一行代码情况:print("aa")
>>> print(linecache.getline("E:/Python/ProjecQt/test.py",1)) #参数1代表读取的第一行
print("aa")
>>> print(linecache.getline("E:/Python/ProjecQt/test.py",2)) #由于第二没有代码,则输出空行 >>> #test.py 两行代码情况:print("bb") print("a")
>>> print(linecache.getline("E:/Python/ProjecQt/test.py",1)) #由于缓存了行代码,则输出仍旧是原始的行
print("aa")
>>> linecache.clearcache() #清除缓存
>>> print(linecache.getline("E:/Python/ProjecQt/test.py",1))
print("bb") >>> print(linecache.getline("E:/Python/ProjecQt/test.py",2))
print("aa")

六. calendar查看日历

calendar.Calendar():查询日历的类(无格式化)
calendar.TextCalendar():取得文本日历字符串(可格式化)
calendar.HTMLCalendar():取得HTML日历字节的串(可格式化)

>>> import calendar  
>>> calendar.prmonth(1999,12) #打印某年某月的日期,如果要返回字符串可使用calendar.month()
December 1999
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 >>> calendar.prcal(2011) #打印整年的日历,返回字符串使用calendar.calendar()
2011 January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31 April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31 July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31 >>> [i for i in calendar.day_name] #返回当前日历中的天所属的星期
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
>>> calendar.isleap(2011) #判断某年是否闰年
False
>>> calendar.isleap(2012)
True
>>> calendar.leapdays(2000,2020) #返回某年到某年区域中的闰年数
5
>>> c = calendar.Calendar()
>>> c.itermonthdays(2011,1) #某年某月中的天数迭代
<generator object itermonthdays at 0x014399B8>
>>> list(c.itermonthdays(2011,2)) #返回某年某月的天数列表
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0]
>>> list(c.itermonthdays2(2011,2)) #返回某年某月的天数和星期的元组列表
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5), (13, 6), (14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5), (20, 6), (21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5), (27, 6), (28, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6)]
>>> list(c.itermonthdates(2011,2)) #返回某年某月的datetime.date格式的天数列表
[datetime.date(2011, 1, 31), datetime.date(2011, 2, 1), datetime.date(2011, 2, 2), datetime.date(2011, 2, 3), datetime.date(2011, 2, 4), datetime.date(2011, 2, 5), datetime.date(2011, 2, 6), datetime.date(2011, 2, 7), datetime.date(2011, 2, 8), datetime.date(2011, 2, 9), datetime.date(2011, 2, 10), datetime.date(2011, 2, 11), datetime.date(2011, 2, 12), datetime.date(2011, 2, 13), datetime.date(2011, 2, 14), datetime.date(2011, 2, 15), datetime.date(2011, 2, 16), datetime.date(2011, 2, 17), datetime.date(2011, 2, 18), datetime.date(2011, 2, 19), datetime.date(2011, 2, 20), datetime.date(2011, 2, 21), datetime.date(2011, 2, 22), datetime.date(2011, 2, 23), datetime.date(2011, 2, 24), datetime.date(2011, 2, 25), datetime.date(2011, 2, 26), datetime.date(2011, 2, 27), datetime.date(2011, 2, 28), datetime.date(2011, 3, 1), datetime.date(2011, 3, 2), datetime.date(2011, 3, 3), datetime.date(2011, 3, 4), datetime.date(2011, 3, 5), datetime.date(2011, 3, 6)]
>>> ct = calendar.TextCalendar() #生成纯文本日历
>>> ct.formatmonth(2011,2,3,3) #返回某年某月的格式化的天数,第三个参数(3)代表列宽度为3个空格,第四个参数(3)代表行高度为3个空格
' February 2011/n/n/nMon Tue Wed Thu Fri Sat Sun/n/n/n 1 2 3 4 5 6/n/n/n 7 8 9 10 11 12 13/n/n/n 14 15 16 17 18 19 20/n/n/n 21 22 23 24 25 26 27/n/n/n 28/n/n/n'
>>> strct = ct.formatmonth(2011,2,3,3)
>>> with open("D:/test.txt","w+") as f:
f.write(strct) #写入文件 179 >>> ''''' test.txt效果如下:
February 2011 Mon Tue Wed Thu Fri Sat Sun 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 '''
>>> ch = calendar.HTMLCalendar() #生成HTML日历
>>> ch.formatmonth(2011,2)
'<table border="0" cellpadding="0" cellspacing="0" class="month">/n<tr><th colspan="7" class="month">February 2011</th></tr>/n<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>/n<tr><td class="noday"> </td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr>/n<tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr>/n<tr><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td><td class="sun">20</td></tr>/n<tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr>/n<tr><td class="mon">28</td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr>/n</table>/n'
>>> strch = ch.formatmonth(2011,2)
>>> with open("D:/test.html","w+") as f:
f.write(strch) 1198
>>> ch.formatmonth(2011,2) #返回某年的完整HTML页面字节的串,如何要保存到HTML文件,需进行二进制写操作(带'b'参数)

七. winreg操作注册表

>>> import winreg  
>>> explorer = winreg.OpenKey(winreg.HKEY_CURRENT_USER,"Software//Microsoft//Windows//CurrentVersion//Explorer")
>>> try:
i = 0
while True:
name , value, type = winreg.EnumValue(explorer,i) #返回键下面的所有值的元组对象的枚举(tuple元组分别代表:值名称,值数据,值类型)
print(name,value,type)
i += 1
except WindowsError:#当不存在值时,抛出WindowsError异常。
print("a WindowsError exception is raised, indicating no more values") WebFindBandHook {68F2D3FC-8366-4a46-8224-58EFA2749425} 1
FileFindBandHook {FFAC7A18-EDF9-40de-BA3F-49FC2269855E} 1
Link b'/x00/x00/x00/x00' 3
SearchSystemDirs 1 4
SearchHidden 1 4
IncludeSubFolders 1 4
Logon User Name Administrator 1
ShellState b'$/x00/x00/x003(/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x01/x00/x00/x00/r/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00' 3
CleanShutdown 0 4
Browse For Folder Width 318 4
Browse For Folder Height 288 4
FaultCount 0 4
FaultTime 0 4
IconUnderline b'/x03/x00/x00/x00' 0
NoFileFolderConnection 0 4
CaseSensitive 0 4
SearchSlowFiles 0 4
a WindowsError exception is raised, indicating no more values

八. keyword判断是否系统关键字

>>> import keyword  
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> keyword.iskeyword("code")
False
>>> keyword.iskeyword("None")
True

九. filecmp比较文件或者目录

>>> import filecmp  
>>> filecmp.cmp("d:/xda1.txt","d:/xda1.txt")
True
>>> filecmp.cmp("d:/xda1.txt","d:/复件 xda1.txt") #复制一个xda1.txt文件
True
>>> filecmp.cmp("d:/xda1.txt","d:/text1.txt") #比较不同内容的文件
False
>>> filecmp.cmp("d:/xda1.txt","d:/复件 xda1.txt") #更改复件内容中的数字1为3
False

十. cmd模块制作自定义命令行操作方式

cmd 模块为命令行接口( command-line interfaces , CLI )提供了一个简单的框架

只需要继承 Cmd 类, 定义 do 和 help 方法. 基类会自动地将这些方法转换为对应命令.

import cmd  
import string, sys class CLI(cmd.Cmd): def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = '> ' #cmd行头的提示 def do_hello(self, arg): #do_是执行的方法
print ("hello again", arg, "!") def help_hello(self):#help_是方法的帮助
print ("syntax: hello [message]"),
print ("-- prints a hello message") def do_quit(self, arg):
sys.exit(1) def help_quit(self):
print ("syntax: quit"),
print ("-- terminates the application") # shortcuts
do_q = do_quit #方法调用的快捷方式
do_h = do_hello cli = CLI()
cli.cmdloop() #一直接受指令

调用方式:

>>>   
> h 123
hello again 123 !
> hello 'abc'
hello again 'abc' !
> help

Documented commands (type help <topic>): 
======================================== 
hello  quit 
 
Undocumented commands: 
====================== 
h  help  q

十一. bisect操作已排序列表

bisect二叉树计算如何插入已排序的列表,或者返回将插入值在已排序列表中的位置。这种方式比每次比较列表中值执行效率高。

>>> import bisect  
>>> aa = [22,55,11,33]
>>> aa.sort() #排序
>>> aa
[11, 22, 33, 55]
>>> bisect.bisect(aa,99) #bisect_right的别名。返回插入值所在
4
>>> bisect.bisect_left(aa,99)
4
>>> bisect.bisect(aa,14)
1
>>> bisect.bisect_left(aa,14)
1
>>> bisect.bisect(aa,22) #插入已经存在的值,则bisect()返回列表中相同值的右边索引
2
>>> bisect.bisect_left(aa,22) #插入已经存在的值,则bisect()返回列表中相同值的左边索引
1
>>> bisect.insort(aa,12) #向排序列表插入值
>>> aa
[11, 12, 22, 33, 55]
>>> bisect.insort(aa,12) #插入存在的值
>>> aa
[11, 12, 12, 22, 33, 55]

python3 小技巧(2)的更多相关文章

  1. Python3 小技巧

    完全个人总接 每个文件头部都可以加入这个,或者放到用单独一个文件,再import *.其实都一样,只需要一行false=False;true=True;none=null=None;hid=lambd ...

  2. 30个有关Python的小技巧

    从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...

  3. <转> 30 个有关 Python 的小技巧

    目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...

  4. 让你瞬间萌比的35个python小技巧

    今天在看python算法的时候,看到一篇关于python的小技巧.瞬间萌比了,原来python也可以这样玩,太神奇了.萌比的是原来这么简单的东西自己都不知道,虽然会写.废话不多说了,开始上菜. 1.拆 ...

  5. Django中的ORM框架使用小技巧

      Django中的ORM框架使用小技巧 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...

  6. Python 中的一些小技巧

    这里是本人收集的一些 Python 小技巧,目前主要是一些实用函数,适合有一定基础的童鞋观看(不会专门介绍使用到的标准库函数).. 一.函数式编程 函数式编程用来处理数据,感觉很方便.(要是再配上管道 ...

  7. Python小技巧:使用一行命令把你的电脑变成服务器

    不知道你有没有遇到这么一种情况,就是你有时候想要把电脑上的一些东西传输到你的手机或者 Pad ,你要么需要使用数据线连接到电脑,有时候还要装各种驱动才可以进行数据传输,要么需要借助第三方的工具,在局域 ...

  8. 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧

    30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...

  9. python实用30个小技巧

    python实用30个小技巧 展开1.原地交换两个数字Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: In [1]: x,y = 10 ,20 In [2]: ...

随机推荐

  1. 【42.86%】【Codeforces Round #380D】Sea Battle

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. hadoop调优之一:概述 分类: A1_HADOOP B3_LINUX 2015-03-13 20:51 395人阅读 评论(0) 收藏

    hadoop集群性能低下的常见原因 (一)硬件环境 1.CPU/内存不足,或未充分利用 2.网络原因 3.磁盘原因 (二)map任务原因 1.输入文件中小文件过多,导致多次启动和停止JVM进程.可以设 ...

  3. 调试 之gdb thread命令 与 ltrace/strace

    我们可以通过  1)  gdb prog_name -> r               用在逐步调试自己的程序时 2)  gdb -> attach process_id       正 ...

  4. 在vue中使用babel-polyfill

    在 Vue.js项目中使用Vuex,Vuex 依赖 Promise,所以如果你的浏览器没有实现 Promise (比如 IE),那么就需要使用一个 polyfill 的库 我们可以通过babel-pr ...

  5. iOS开发Quartz2D 十三:画板涂鸦

    一:效果如图: 二:代码 #import "ViewController.h" #import "DrawView.h" #import "Handl ...

  6. ConcurrentLinkedQueue使用方法

    它是一个基于链接节点的无界线程安全队列.该队列的元素遵循先进先出的原则.头是最先加入的,尾是最近加入的. 插入元素是追加到尾上.提取一个元素是从头提取.当多个线程共享访问一个公共 collection ...

  7. jquery-8 jquery如何处理css样式

    jquery-8  jquery如何处理css样式 一.总结 一句话总结: 1.如何获取网页的三个高? 1)可视区域的高$(window).height(); 2)文档总高度$(document).h ...

  8. printk()函数的总结

    我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况.对程序的调试起到了很重要的作用.(下文中的日志级别和控制台日志控制级别是一 ...

  9. sysbench压测Oracle

    安装: yum -y install make m4  autoconf automake libtool pkgconfig libaio-devel rpm -Uvh http://dl.fedo ...

  10. 【33.20%】【LA 4320】【Ping pong】

    [Description] N (3 ≤ N ≤ 20000) ping pong players live along a west-east street(consider the street ...