python_day4学习笔记

一、内置函数

 

 备注:函数的用法请点击详见官方地址:内置函数

二、文件操作

  • open函数

用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。

  • 语法:file object = open(file_name [, access_mode][, buffering])

各个参数的细节如下:     

  1. file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
  2. access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
  3. 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函数
  1. Tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:
  2. seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
  3. 如果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、rsplit、splitlines

  • 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']

 

posted on 2016-06-03 23:53  Jasongo  阅读(404)  评论(0编辑  收藏  举报