python杂记

唠里个叨

关于python的笔记,比较杂,想到啥就说啥。

文件读写

官方文档: open

这是python内建的函数,基本用法如下:

hfile  = open(file_name [, access_mode][, buffering])

其中access_mode表示打开的模式,常用的如下:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

举例如下:

hfile  = open('a.data','r+')
print hfile.read()
hfile.write("hello\n")
hfile.close()

不过现在一般推荐另外一种写法:

1
2
3
4
with open('a.data','r+') as hfile:
print hfile.read()
hfile.write("world\n")
hfile.close()

文件对象的方法常用的有:

1
2
hfile.readline()
hfile.readlines()

这里注意一下区别:readline是每次读取一行,readlines是一次性读取所有行,所以这里要注意,不要爆了内存,/滑稽脸

python json

官方文档:json encode and decode

这里说的是python内置的json,为了提高效率,当然可以使用第三方的json库,比如cjson。

函数 功能
loads 将已经编码好的json字符串转换为python对象
dumps 与loads相反,将python对象序列化为json字符串

这里需要对比如下一对函数(不常用):

函数 功能
load 读json文件为python对象
dump 与load相反,python对象写入json文件

写脚本的时候经常碰到的是json字符串和dict的转换。

暂时就这么多,以后想到再补充

python dict

python字典应该是比较常用的一种对象,也比较好用。

1
d = {"name":"smaug","age":25,"sex":"male"}

访问字典

1
2
age = d['age']
print age

但推荐采用下面一种,dict内置函数:

1
2
age = d.get('age')
print age

如果age不存在,则返回None

遍历字典

常用两种方法:

1
2
3
4
5
6
7
# method 1
for i in d:
print "d[%s] = %s".format(i,d[i])

# method 2
for (k,v) in d.items():
print "d[%s] = %s".format(k,v)

时间、日期相关

这块平常经常用到,日期转时间戳,时间戳转日期,日期格式化等,但我每次都是记不住。

时间戳

1
2
#1508103239.487282
time.time()

返回当前时间戳,单位秒。

时间戳转日期

1
2
3
4
now = time.time()
tl = time.localtime(now)
date = time.strftime('%Y-%m-%d %H:%M:%S', tl)
# 结果为 '2017-10-16 12:34:00'

日期转时间戳

1
2
dnow = '2017-10-16 12:34:00'
timestamp = time.mktime(time.strptime(dnow,'%Y-%m-%d %H:%M:%S'))

python表格

一般用于打印或者日志输出,以表格的方式展示也会很美观。

1
2
3
4
5
6
7
8
9
10
11
12
13
from prettytable import PrettyTable

row = PrettyTable(["城市","总访问量", "失败量", "慢速量","失败率","慢速率"])
row.align["城市"] = "l"# Left align city names
row.padding_width = 1# One space between column edges and contents (default)

retrow = [['郑州','241',1,2,0.41,0.83],['灵宝',56,0,1,0.0,1.79]]
for r in retrow:
row.add_row(r)

with open('mytable','w') as hfile:
hfile.write(str(row))
hfile.close()

最终结果形如:

python可变参数

形如下面的函数定义就是可变参数:

1
2
def auth_requests(method, *args, **kwargs):
...

*args

1
def Func(someparam, *args):
	print someparam
	print args
	
>>> Func(1, 2, 3, 4)
1
(2, 3, 4)

Func 中匹配完定义好的参数,剩余的参数以元组的形式存储在 args(args 名称你可以自行定义),因此在上述程序中只要你传入不小于 1 个参数,该函数都会接受,当然你也可以直接定义只接受可变参数,你就可以自由传递你的参数。

**kwargs

args不同,*kwargs不是以元组的方式保存,而是需要采用arg1 = value1,arg2 = value2的字典形式。

1
2
3
4
5
6
7
8
9
10
11
>>> def func(a,*b,**c):
... print a
... print b
... print c
...
>>> func('helloa','hellob','hahab',data = 'cc',cd = 'cccc')
helloa
('hellob', 'hahab')
{'data': 'cc', 'cd': 'cccc'}
>>>
>>>

还是挺简单的。

END

暂时就写到这里吧,有想到的再补充。

buy me a cola!

欢迎关注我的其它发布渠道