python_day4学习笔记
一、内置函数
备注:函数的用法请点击详见官方地址:内置函数
二、文件操作
- open函数
用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。
- 语法:file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
- file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
- File对象的属性:
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
综合实例:
运行结果:
1 Closed or not: False 2 Opening mode: wb 3 Name of the file: d:\TC\test.txt 4 Softpace flag: 0 5 Read String is: yinjia ho 6 Read Strin is: w 7 this is 8 886 how lehloklj
- with方法
避免打开文件后忘记关闭,可以通过以下格式写,即:
1 with open('log','r') as f:
当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:
1 with open('log1') as obj1, open('log2') as obj2: 2 pass
- tell与seek函数
- Tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:
- seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
- 如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
运行结果:
1 Read String is : yinjia ho 2 Current file position : 10 3 Read String is : yinjia ho
- readline、readlines、writelines函数
1)readline() #方法读取打开文件的一行; >>> fo = open("d:\\TC\\mylog.txt", 'r') >>> fo.readline() ' yinjia how\n' 2)readlines() #方法作为一个字符串列表返回; >>> fo = open("d:\\TC\\mylog.txt", 'r') >>> fo.readlines() [' yinjia how\n', 'this is\n', '886 how lehloklj 7'] 3)writelines() #接受一个字符串列表作为参数,将它们写入文件,行结束符不会被自动加入,如需要的话,在调用writelines()前人每行结尾加上行结束符。 >>>>fobj = open('/root/3.txt','w') >>>>msg = ['write date\n','to 3.txt\n','finish\n'] >>>>fobj.writelines(msg) >>>>fobj.close() cat /root/3.txt write date to 3.txt finish
三、lambda、map、filter、reduce
lambda它是一个表达式,而不是一个语句,所以在def不允许出现的地方仍然可以使用lambda函数,例如list里。但是lambda内只可以执行一个表达式。
1 def f(x): 2 return x**2 3 print(f(3)) 4 结果:9 5 6 a = lambda x: x**2 7 print(a(3)) 8 结果:9 9 10 a = lambda x,y: x + y 11 print(a(1,2)) 12 结果:3 13 14 #一个lambda语句就相当于一个函数定义,调用的时候也和函数一样。
- map
内置的map接受函数和列表作为参数,然后返回函数处理之后的列表,可以用来替代循环, 它比for循环的效率更高,原因是它是直接对应的c语言里的循环。
第一个参数接收一个函数名,第二个参数接收一个可迭代对象,举例如下:
1 def add1(a): 2 return a + 1 3 4 def add2(a, b): 5 return a + b 6 7 def add3(a, b, c): 8 return a + b + c 9 10 a1 = [1,2,3,4,5] 11 a2 = [1,2,3,4,5] 12 a3 = [1,2,3,4,5] 13 14 b = map(add1, a1) 15 print b 16 17 b = map(add2, a1, a2) 18 print b 19 20 b = map(add3, a1, a2, a3) 21 print b
- filter
filter函数,是用来过滤列表的。简单的说就是用一个函数来过滤一个列表,把列表的每一项传递进入过滤函数,过滤函数返回false就从这个列表中删除该项。
1 def add1(a): 2 if a > 2: 3 return True 4 return False 5 6 a1 = [1,2,3,4,5] 7 8 b = filter(add1, a1) 9 print b 10 运行结果: 11 [3,4,5]
filter函数相当于这个:
1 c = [b for b in a1 if b > 2] 2 print c
- reduce
reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作。得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
1 def myadd(x, y): 2 return x + y 3 sum = reduce(myadd,(1,2,3,4,5,6,7)) 4 print sum 5 6 运行结果:28 7 8 #当然,也可以用lambda的方法,更为简单: 9 sum = reduce(lambda x,y:x+y,(1,2,3,4,5,6,7)) 10 print sum
- split
split()从左向右寻找,以某个元素为中心将左右分割成两个元素并放入列表中。
1 str = 'inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255' 2 str.split("net",1) 3 4 运行结果: 5 ['i', ' 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255']
- rsplit
split()从右向左寻找,以某个元素为中心将左右分割成两个元素并放入列表中。
1 str = 'inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255' 2 str.rsplit("net",1) 3 4 运行结果: 5 ['inet 192.168.122.1 ', 'mask 255.255.255.0 broadcast 192.168.122.255']
- splitlines
splitlines()根据换行符(\n)分割并将元素放入列表中
1 str = 'inet 192.168.122.1\n netmask 255.255.255.0\n broadcast 192.168.122.255' 2 str.splitlines() 3 4 运行结果: 5 ['inet 192.168.122.1', ' netmask 255.255.255.0', ' broadcast 192.168.122.255']
作者:Jason
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。