原文 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. log4cxx入门篇

    log4cxx入门篇     先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88 ...

  2. YUV与RGB格式转换

    YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(25 ...

  3. Windows Phone 8.1 联系人与日历

    (1)联系人(Manifest 获取权限) 1)获取联系人 获取联系人的方式有两种 A. ContactPicker ContactPicker 也就是直接打开一个系统的选择联系人界面,让用户选择,可 ...

  4. nginx源代码分析--ngx_http_optimize_servers()函数

    这个函数做了连部分工作:1)以port为入口点 将实用的信息存放到hash表内 2)调用ngx_http_init_listening()函数 对port进行监听 1. 在ngx_http_core_ ...

  5. 【前端统计图】echarts实现简单柱状图

    图片.png <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  6. JavaStuNote 4

    装箱(inbox)和拆箱(outbox) 代表了类类型和基本类型之间的转换行为. 手动版本号: Integer b = new Integer(10); Int a = b.intValue; 自己主 ...

  7. html常用样式margin、border怎么使用

    html常用样式margin.border怎么使用 一.总结 一句话总结:1.margin:auto配合width才能居中:2.border的三个属性依次是边框宽度,边框样式,边框颜色 1.html中 ...

  8. active set method(激活集方法)

    在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 约束条件定义着可行域(feasible region),对于可行域中的任一点 x ...

  9. 颜色转换:#hhhfff->UIColor (MHHexColoring)

    MHHexColoring为开发者快速获取想要的十六进制颜色(Hex Color) 查找16进制色码的网站:http://www.color-hex.com // 版权属于原作者 MHHexColor ...

  10. Java数组定义学习的一些随笔

    //一维数组的定义 int[] arr1 = new int[3];//arr1 = {1,2,3}: 错误 int[] arr2 = new int[]{1,2,3};//int[] arr2 = ...