VII Python(3)基础知识

表达式和语句:

常用的表达式操作符:

算术运算:+,-,*,/,//截断除法,%,**幂运算

逻辑运算:x or y,xand y,not x

比较运算:<,>,==,<=,>=,!=

一元运算:-x,+x,~x按位取反

三元选择表达式:x if yelse z

成员关系运算:x iny,x not in y

位运算:x | y,x<< y,x >> y,x & y,x ^ y

索引和分片:x[i],x[i:j],x[i:j:stride]

调用:x(...)

取属性:x.ATTRIBUTE

对象实例测试:x isy,x not is y,

匿名函数:lambdaargs: expression

生成器函数发送协议:yieldx

元组(),列表[],字典{}

运算优先级:

(...)

[...]

{...}

s[i],s[i:j],s[i:j:stride]

s.attribute

s(...)

+x,-y

x**y

*,/,//,%

+,-

<<,>>

&与

^异或

|或

<,<=,>,>=,==,!=

is,not is

in,not in

not

and

or

lambda

语句:

赋值语句(创建引用)

调用语句

print语句(打印对象)

if,elif,else(条件判断)

for,else(序列迭代)

while,else(普通循环)

pass(占位符)

break,continue

def,return

yield

global(命名空间)

from,import(模块属性访问)

class

try,except,finally(捕捉异常)

raise(手动触发异常)

del(删除引用)

assert(调试检查)

with,as(环境管理器)

python的比较操作:

所有python对象都支持比较操作,可用于测试相等性、相对大小等;

如果是复合对象,python会检查所有部分,包括自动遍历各级嵌套对象,直到可以得出最终结果;

测试操作符:(==,测试值的相等性;is表达式,测试对象的一致性)

python中不同类型的比较方法(数字,通过相对大小进行比较;字符串,按照字典次序逐字符比较;列表和元组,自左至右比较各部分内容;字典,对排序后的列表(key,value)进行比较);

python中真和假的含义(非0数字为真,否则为假;非空对象为真,否则为假;None则始终为假;任何非0数字和非空对象都为真;数字0、空对象、特殊对象None均为假;比较和相等测试会递归的应用于数据结构中;返回值为True或False)

组合条件测试(x and y与运算;x or y或运算;not x非运算)

条件测试表达式:

语法结构(elif是可选的,若仅用于占位而后再填充相关语句时可使用pass):

if boolean_expression1:

suite1

elif boolean_expression2:

suite2

...

else:

else_suite

三元表达式常用于赋值(max=Aif A>B else B):

语法结构(boolean_expression为True结果为expression1,否则为expression2):

expression1 ifboolean_expression else expression2

A = y if x else z,通常在为某变量设定默认值时使用,等同于:

if x:

A= y

else:

A= z

while循环:

用于编写通用迭代结构,顶端测试为真执行循环体,并会重复多次测试直到为假后执行循环后的其它语句

while语法(else分支可选,只要boolean_expression的结果为True循环执行,boolean_expression的结果为False若有else分支else分支将执行;else代码块,循环正常终止才会执行,如果循环终止是由break导致则else段语句不会执行):

while boolean_expression:

while_suite

else:

else_suite

for循环:

一个通用的序列迭代器,用于遍历任何有序的序列对象内的元素;

可用于字符串、元组、列表和其它的内置可迭代对象,及通过类所创建的新对象;

for语法(通常expression是一个单独的变量或是一个变量序列,一般以元组的形式给出,如果将元组或列表用于expression,则其中的每个数据项都会拆分到表达式的项,如t=[(1,2),(3,4),(5,6)],for (a,b) in t:):

for expression1 initerable:

for_suite

else:

else_suite

python也提供了能进行隐性迭代的工具,(有:in成员关系测试;列表解析;map;reduce;filter);

python提供了两个内置函数range和zip,用于在for循环中定制特殊的循环;

range是一次性生成所有数据元素都放在内存中,一次性返回连续的整数列表;

xrange一次产生一个数据元素,是用一个生成一个,对于非常大的序列用xrange可节约内存空间;

zip返回并行的元素元组的列表,常用于在for循环中遍历数个序列;

enumerate(产生偏移和元素,range可在非完备遍历中生成索引偏移而非偏移处的元素,如果同时需要偏移索引和偏移元素,使用enumerate()函数,此函数返回一个生成器对象);

for循环比while循环执行速度快,尤其是遍历时要使用for循环;

非完备遍历:

In [52]: s1=‘how are you these days‘

In [53]: for i in range(0,len(s1),2):

....:     print s1[i],

....:

h w a e y u t e e d y

修改列表:

In [57]: l1=[1,2,3,4,5]

In [58]: for i in range(len(l1)):

....:     l1[i]+=1

....:

In [59]: print l1

[2, 3, 4, 5, 6]

并行遍历zip(取得一个或多个序列为参数,将给定的并排的元素配成元组,返回这些元组的列表,当参数长度不同时,zip会以最短序列的长度为准,可在for循环中用于实现并行迭代,也常用于动态构造字典):

In [60]: l1=[1,2,3,4,5,6,7]

In [61]: l2=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]

In [62]: zip(l1,l2)

Out[62]: [(1, ‘a‘), (2, ‘b‘), (3, ‘c‘), (4,‘d‘), (5, ‘e‘), (6, ‘f‘), (7, ‘g‘)]

In [63]: d1={}

In [64]: for (k,v) in zip(l1,l2):

....:     d1[k]=v

....: print d1

....:

{1: ‘a‘, 2: ‘b‘, 3: ‘c‘, 4: ‘d‘, 5: ‘e‘, 6:‘f‘, 7: ‘g‘}

产生偏移和元素:

In [66]: s1=‘hello world‘

In [67]: e1=enumerate(s1)

In [68]: e1.next()

Out[68]: (0, ‘h‘)

In [69]: e1.next()

Out[69]: (1, ‘e‘)

In [70]: e1.next()

Out[70]: (2, ‘l‘)

In [71]: e1.next()

Out[71]: (3, ‘l‘)

In [72]: e1.next()

Out[72]: (4, ‘o‘)

举例1(逐一显示列表中的所有元素):

方一:

In [2]: l1=[1,2,3,4,5]

In [3]: count=0

In [4]: while count < len(l1):

...:     print l1[count]

...:     count+=1

...:

1

2

3

4

5

方二:

In [5]: while l1:

...:     print l1[0]

...:     l1=l1[1:]  #(此句也可写为l1.pop(0))

...:

1

2

3

4

5

方三(逆序显示):

In [11]: l1=[1,2,3,4,5]

In [12]: while l1:

....:     print l1[-1]

....:     l1.pop()

....:

5

4

3

2

1

方四(推荐使用):

In [16]: for x in l1:

....:    print x

....:

1

2

3

4

5

举例2(求100以内所有偶数之和):

In [17]: sum=0

In [18]: for i in range(2,100,2):

....:     sum+=i

....: print sum

....:

2450

举例三(逐一显示指定字典的所有key,并在最后显示总key数):

方一(推荐使用):

In [19]: d1={‘x‘:1,‘y‘:2,‘z‘:3}

In [20]: keylist=d1.keys()

In [21]: print keylist

[‘y‘, ‘x‘, ‘z‘]

In [22]: for i in keylist:

....:     print i,

....:

y x z

In [23]: print len(d1)

3

方二:

In [25]: keylist=d1.keys()

In [26]: while keylist:

....:     print keylist[0]

....:     keylist.pop(0)

....: else:

....:     print len(d1)

....:

y

x

z

3

举例四(创建一个包含了100以内所有奇数的列表):

方一:

In [27]: l1=[]

In [28]: x=1

In [29]: while x<100:

....:     l1.append(x)

....:     x+=2

....: print l1

....:

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

方二(推荐使用):

In [30]: l1=[]

In [31]: for i in range(1,100,2):

....:     l1.append(i)

....: print l1

....:

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

举例五(将两个列表生成字典):

方一:

In [32]: l1=[1,2,3,4,5,6,7]

In [33]:l2=[‘mon‘,‘tue‘,‘wed‘,‘thu‘,‘fri‘,‘sat‘,‘sun‘]

In [34]: d1={}

In [35]: count=0

In [36]: if len(l1)==len(l2):

....:     while count<len(l1):

....:        d1[l1[count]=l2[count]

....:         count+=1

....: print d1

....:

{1: ‘mon‘, 2: ‘tue‘, 3: ‘wed‘, 4: ‘thu‘, 5:‘fri‘, 6: ‘sat‘, 7: ‘sun‘}

方二:

In [48]: d1={}

In [49]: if len(l1)==len(l2):

....:     for i in range(0,len(l1)):

....:         d1[l1[i]]=l2[i]

....: print d1

....:

{1: ‘mon‘, 2: ‘tue‘, 3: ‘wed‘, 4: ‘thu‘, 5:‘fri‘, 6: ‘sat‘, 7: ‘sun‘}

举例六(逐一分开显示字典中的所有元素):

In [73]: d1={‘x‘:1,‘y‘:2,‘z‘:3}

In [74]: for (k,v) in d1.items():

....:     print k,v

....:

y 2

x 1

z 3

举例七(逐一显示列表中索引为奇数的元素):

In [76]: l1=[‘mon‘,‘tue‘,‘wed‘,‘thu‘,‘fri‘,‘sat‘,‘sun‘]

In [77]: for i in range(1,len(l1),2):

....:     print l1[i]

....:

tue

thu

sat

举例八(将属于列表1但不属于列表2的所有元素定义为一个新列表3):

In [78]:l1=[‘mon‘,‘tue‘,‘wed‘,‘thu‘,‘fri‘,‘sat‘,‘sun‘]

In [79]: l2=[‘sun‘,‘mon‘]

In [80]: l3=[]

In [81]: for i in l1:

....:     if i not in l2:

....:         l3.append(i)

....: print l3

....:

[‘tue‘, ‘wed‘, ‘thu‘, ‘fri‘, ‘sat‘]

举例九(将列表1中的每个元素从列表2中移除,属于l1不属于l2的忽略):

In [82]: l1=[‘stu3‘,‘stu5‘]

In [83]: l2=[‘stu1‘,‘stu2‘,‘stu3‘,‘stu4‘,‘stu5‘]

In [84]: for i in l1:

....:     if i in l2:

....:         l2.remove(i)

....: print l2

....:

[‘stu1‘, ‘stu2‘, ‘stu4‘]

减少引用计数:

del VARIABLE_NAME(引用此对象的某变量名称被显示销毁);

给引用此对象的某变量名重新赋值;

list.pop()、list.remove()等从容器中移除对象;

容器本身被销毁

增加对象的引用计数场景:

变量赋值(对象创建时);

将对象添加进容器时,如list.append();

当对象被当作参数传递给函数时;

为对象创建另外的变量名或多重目标赋值,如s1=s2=s3=‘ab‘;

python迭代(重复做一件事,iterable可迭代对象,迭代器iterator):

支持每次返回自己所包含的一个成员对象,对象实现了__iter__方法;

可迭代对象(序列类型有str、list、tuple;非序列类型有file、dict;用户自定义的一些包含了__iner__()或__getitem__()方法的类);

dir(list)中有__iter__方法说明此对象支持迭代,某对象内部有__iter__或__getitem__方法,当这个对象调用此方法时会在内存中创建属于当前迭代器的可迭代对象,使用此内存地址的对象就可实现迭代,如i1=l1.__iter__()或i1=iter(l1),再用 i1.next()遍历每个元素,遍历完成后迭代器不会从头开始再迭代;

l1.__iter__(),返回迭代器地址,要引用此地址如i1=l1.__iter__();

iterator又称cursor游标,它是程序设计中的软件设计模式,是一种可在容器container上实现元素遍历的接口,iterator是一种特殊的数据结构,在python中以对象形式存在,对于一个集体中的每个元素,想要执行遍历,针对这个集体的迭代器定义了遍历集体中每个元素的顺序或方法,help(iter);

在python中,iterator是遵循迭代协议的对象,使用iter()可从任何序列对象中得到迭代器,若要实现迭代器,需要在类中定义next()方法(python3.*中是__next__()),要使迭代器指向下一个元素,使用函数next(),当没有元素时引发StopIteration异常;

for循环可用于任何可迭代对象,for循环开始时,会通过迭代协议传递给iter()内置函数,从而能够从可迭代对象中获得一个迭代器,返回的对象含有需要的next()方法;

python列表解析是迭代机制的一种应用,常用于实现创建新的列表,因此要放在[]中,语法:

[expression for iter_var in iterable]

[expression for iter_var in iterable ifcond_expr]

举例1(这种方式性能较差):

In [91]: l1=[1,2,3,4,5,6,7,8,9]

In [92]: l2=[]

In [93]: for i in l1:

....:     l2.append(i**2)

....: print l2

....:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

举例2(推荐使用):

In [88]: l1=[x**2 for x in range(1,10)]

In [89]: print l1

[1, 4, 9, 16, 25, 36, 49, 64, 81]

举例3:

In [94]: import os

In [95]: files=os.listdir(‘/var/log‘)

In [96]: l1=[filename for filename in filesif filename.endswith(‘.log‘)]

In [97]: print l1

[‘anaconda.program.log‘,‘spice-vdagent.log‘, ‘anaconda.yum.log‘, ‘yum.log‘, ‘vmware-tools-upgrader.log‘,‘boot.log‘, ‘anaconda.ifcfg.log‘, ‘pm-powersave.log‘, ‘anaconda.storage.log‘,‘anaconda.log‘, ‘Xorg.0.log‘, ‘dracut.log‘, ‘wpa_supplicant.log‘]

举例4:

In [101]: for i in [j**2 for j inrange(1,10) if j%2==0]:

.....:     print i/2,

.....:

2 8 18 32

举例5:

In [102]: l1=[‘x‘,‘y‘,‘z‘]

In [103]: l2=[1,2,3]

In [104]: l3=[(i,j) for i in l1 for j inl2]

In [105]: l4=[(i,j) for i in l1 for j in l2if j!=1]

In [106]: print l3

[(‘x‘, 1), (‘x‘, 2), (‘x‘, 3), (‘y‘, 1),(‘y‘, 2), (‘y‘, 3), (‘z‘, 1), (‘z‘, 2), (‘z‘, 3)]

In [107]: print l4

[(‘x‘, 2), (‘x‘, 3), (‘y‘, 2), (‘y‘, 3),(‘z‘, 2), (‘z‘, 3)]

注:若原列表元素本身就很多,列表解析后的结果又呈几何倍数增长,这会占用大量内存,这时要用到扩展列表解析也叫生成器generator([]换为()),类似range和xrange的区别

generator生成器:

python2.4引入,并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目产生yield出来,生成器表达式使用了惰性计算或称作延迟求值的机制;

enumerate()函数返回一个生成器对象(range可在非完备遍历中用于生成索引偏移,而非偏移的元素,如果同时要偏移索引和偏移元素,可使用此函数);

序列过长,且每次只需要获取一个元素时,应考虑使用生成器表达式而不是列表解析;

语法:

(expression for iter_var in iterable)

(expression for iter_var in iterable ifcond_expr)

举例1:

In [108]: g1=(i**2 for i in range(1,5))  #(要通过变量引用,若不引用是其内存地址,调用一次生成一个值)

In [109]: g1.next()

Out[109]: 1

In [110]: g1.next()

Out[110]: 4

In [111]: g1.next()

Out[111]: 9

In [112]: g1.next()

Out[112]: 16

举例2:

In [119]: for j in (i**2 for i inrange(1,11) if i%2==0):

.....:     print j/2

.....:

2

8

18

32

50

举例3:

In [124]: url=‘www.magedu.com‘

In [125]: g1=enumerate(url)

In [126]: g1.next()

Out[126]: (0, ‘w‘)

In [127]: g1.next()

Out[127]: (1, ‘w‘)

In [128]: g1.next()

Out[128]: (2, ‘w‘)

In [129]: g1.next()

Out[129]: (3, ‘.‘)

In [130]: g1.next()

Out[130]: (4, ‘m‘)

python文件对象:

FS是OS用于明确磁盘或分区上的文件的方法和数据结构(即在磁盘上组织文件的方法);

计算机文件(或称文件、电脑档案、档案)是存储在某种长期储存设备或临时存储设备中的一段数据流,且归属于计算机FS管理之下;

文件是计算机中由OS管理的具有名字的存储区域,在linuxOS上文件被看成是字节序列;

open(),此内置函数用于打开文件和创建文件对象,语法:

open(filename[,mode[,bufsize]]);

open()方法接收三个参数,文件名、模式和缓冲区参数:

open()函数返回的是一个文件对象(内存中的位置,要用变量引用);

mode指定文件的打开模式,r、w、a附加、r+、w+、a+、rb、wb(后面有加号表示同时支持输入输出操作即读入写出,后面有b表示以二进制方式打开);

bufsize定义输入输出缓存(0表示禁用,无输出缓存;1表示使用缓存,要指定缓冲区大小;负数表示使用系统默认设置;正数表示使用近似指定大小的缓冲);

In [1]: f1=open(‘/etc/passwd‘,‘r‘)

In [2]: type(f1)

Out[2]: file

In [3]: f1.<TAB>

f1.close       f1.errors      f1.isatty      f1.newlines    f1.readinto    f1.seek        f1.truncate    f1.xreadlines

f1.closed      f1.fileno      f1.mode        f1.next        f1.readline    f1.softspace   f1.write

f1.encoding    f1.flush       f1.name        f1.read        f1.readlines   f1.tell        f1.writelines

In [3]: f1.next()

Out[3]: ‘root:x:0:0:root:/root:/bin/bash\n‘

In [4]: f1.next()

Out[4]:‘bin:x:1:1:bin:/bin:/sbin/nologin\n‘

In [5]: f1.next()

Out[5]:‘daemon:x:2:2:daemon:/sbin:/sbin/nologin\n‘

In [6]: print dir(file)

[‘__class__‘, ‘__delattr__‘, ‘__doc__‘,‘__enter__‘, ‘__exit__‘, ‘__format__‘, ‘__getattribute__‘, ‘__hash__‘,‘__init__‘, ‘__iter__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘,‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘close‘, ‘closed‘, ‘encoding‘, ‘errors‘, ‘fileno‘, ‘flush‘,‘isatty‘, ‘mode‘, ‘name‘, ‘newlines‘, ‘next‘, ‘read‘, ‘readinto‘, ‘readline‘,‘readlines‘, ‘seek‘, ‘softspace‘, ‘tell‘, ‘truncate‘, ‘write‘, ‘writelines‘,‘xreadlines‘]

In [7]: help(f1.fileno)  #(文件描述符,0、1、2系统默认的标准输入、标准输出、标准错误输出)

fileno() -> integer "filedescriptor".

This is needed for lower-level fileinterfaces, such os.read().

In [8]: f1.fileno()

Out[8]: 7

In [56]: f1.readline()  #(一次读取一行并返回指针,若使用f1.next()则不会移动指针)

Out[56]:‘root:x:0:0:root:/root:/bin/bash\n‘

In [57]: f1.readline()

Out[57]:‘bin:x:1:1:bin:/bin:/sbin/nologin\n‘

In [58]: f1.tell()   #(返回当前指针在文件中的位置,单位是字节,若是追加会将指针移至最后)

Out[58]: 65

In [59]: f1.readlines()   #(将文件所有内容按行生成列表,行结束符也在列表元素中,若文件很大时会占用内存空间)

Out[59]:

[‘daemon:x:2:2:daemon:/sbin:/sbin/nologin\n‘,

‘adm:x:3:4:adm:/var/adm:/sbin/nologin\n‘,

‘lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n‘,

……

‘nagios:x:501:502::/home/nagios:/bin/bash\n‘]

In [60]: help(file.seek)

seek(offset[, whence])-> None.  Move to new file position.(whence值有0、1、2表示起点位置,默认0表示从文件头,1表示从当前位置,2表示从文件尾部;offset表示偏移量)

In [61]: f1.seek(0)  #(f1.seek(0,2),从文件尾部偏移0个byte)

In [62]: f1.tell()

Out[62]: 0

In [63]: f1.seek(65)

In [64]: f1.readline()

Out[64]:‘daemon:x:2:2:daemon:/sbin:/sbin/nologin\n‘

In [65]: f1.tell()

Out[65]: 105

In [66]: help(file.read)

read([size]) -> readat most size bytes, returned as a string.(以bytes为单位读字串)

In [67]: f1.read(10)

Out[67]: ‘adm:x:3:4:‘

In [68]: f1.tell()

Out[68]: 115

In [69]: f1.next()

Out[69]: ‘adm:/var/adm:/sbin/nologin\n‘

In [70]: f1.tell()

Out[70]: 1515

In [73]: help(file.name)

Help on member descriptor__builtin__.file.name:(获取当前文件名,name是属性不是方法)

In [74]: f1.name

Out[74]: ‘/etc/passwd‘

In [75]: s1=‘abc‘

In [76]: s2=‘xyz‘

In [77]: s1.join(s2)   #(以s1为分隔符连接s2中的每个元素)

Out[77]: ‘xabcyabcz‘

In [78]: ‘ ‘.join(s1)   #(通常这么用,‘ ‘.join,在join前面是分隔符delimeter此例是空格)

Out[78]: ‘a b c‘

In [79]: ‘ ‘.join(s2)

Out[79]: ‘x y z‘

In [80]: s1+s2   #(连接两个字串)

Out[80]: ‘abcxyz‘

In [81]:help(file.writelines)

writelines(sequence_of_strings)-> None.  Write the strings to thefile.(将列表中的所有元素的字符串连接)

In [85]: f1=open(‘/tmp/test.txt‘,‘r+‘)

In [86]: f1.writelines(l1)   #(此种方式最终test.txt中保存的内容杂乱无章)

In [87]: f1.flush()

In [88]: l2=[i+‘\n‘ for i inos.listdir(‘/etc‘)]   #(此种方式会将每个文件或目录换行显示)

In [89]: f1.writelines(l2)

In [90]: f1.flush()

[[email protected] ~]# cat /tmp/test.txt

rc.sysinit

favicon.png

ld.so.cache

libreport

……

In [91]:help(file.isatty)

isatty() -> true orfalse.  True if the file is connected toa tty device.(判断某一文件是否是终端设备文件)

In [96]: f1=open(‘/dev/tty‘)

In [97]: f1.isatty()

Out[97]: True

In [99]:help(file.truncate)

truncate([size]) ->None.  Truncate the file to at most sizebytes.(文件截取)

In [113]: f1.truncate(f1.tell())   #(指针所在处之后的内容全部删掉)

In [115]: f1.closed   #(closed是属性,判断文件是否为关闭状态)

Out[115]: False

In [116]: f1.encoding   #(获取当前文件编码)

In [117]: f1.mode   #(获取当前文件打开时的模式)

Out[117]: ‘a+‘

In [118]: f1.newlines   #(显示指针所在位置之前的行结束符)

In [121]: f1.close()

In [122]: f1.closed

Out[122]: True

In [1]: import os

In [2]: os.<TAB>   #(os模块下有很多方法和属性,将OS中用C语言编写的命令用python封装即可调用)

Display all 207 possibilities? (y or n)

os.EX_CANTCREAT      os.SEEK_END          os.execve            os.lstat             os.setuid

os.EX_CONFIG         os.SEEK_SET          os.execvp            os.major             os.spawnl

os.EX_DATAERR        os.TMP_MAX           os.execvpe           os.makedev           os.spawnle

os.EX_IOERR          os.UserDict          os.extsep            os.makedirs          os.spawnlp

os.EX_NOHOST         os.WCONTINUED        os.fchdir            os.minor             os.spawnlpe

os.EX_NOINPUT        os.WCOREDUMP         os.fchmod            os.mkdir             os.spawnv

os.EX_NOPERM         os.WEXITSTATUS       os.fchown            os.mkfifo            os.spawnve

os.EX_NOUSER         os.WIFCONTINUED      os.fdatasync         os.mknod             os.spawnvp

os.EX_OK             os.WIFEXITED         os.fdopen            os.name              os.spawnvpe

os.EX_OSERR          os.WIFSIGNALED       os.fork              os.nice              os.stat

os.EX_OSFILE         os.WIFSTOPPED        os.forkpty           os.open              os.stat_float_times

os.EX_PROTOCOL       os.WNOHANG           os.fpathconf         os.openpty           os.stat_result

os.EX_SOFTWARE       os.WSTOPSIG          os.fstat             os.pardir            os.statvfs

os.EX_TEMPFAIL       os.WTERMSIG          os.fstatvfs          os.path              os.statvfs_result

os.EX_UNAVAILABLE    os.WUNTRACED         os.fsync             os.pathconf          os.strerror

os.EX_USAGE          os.W_OK              os.ftruncate         os.pathconf_names    os.symlink

os.F_OK              os.X_OK              os.getcwd            os.pathsep           os.sys

os.NGROUPS_MAX       os.abort             os.getcwdu           os.pipe              os.sysconf

os.O_APPEND          os.access            os.getegid           os.popen             os.sysconf_names

os.O_ASYNC           os.altsep            os.getenv            os.popen2            os.system

os.O_CREAT           os.chdir             os.geteuid           os.popen3            os.tcgetpgrp

os.O_DIRECT          os.chmod             os.getgid            os.popen4            os.tcsetpgrp

os.O_DIRECTORY       os.chown             os.getgroups         os.putenv            os.tempnam

os.O_DSYNC           os.chroot            os.getloadavg        os.read              os.times

os.O_EXCL            os.close             os.getlogin          os.readlink          os.tmpfile

os.O_LARGEFILE       os.closerange        os.getpgid           os.remove            os.tmpnam

os.O_NDELAY          os.confstr           os.getpgrp           os.removedirs        os.ttyname

os.O_NOATIME         os.confstr_names     os.getpid            os.rename            os.umask

os.O_NOCTTY          os.ctermid           os.getppid           os.renames           os.uname

os.O_NOFOLLOW        os.curdir            os.getresgid         os.rmdir             os.unlink os.O_NONBLOCK        os.defpath           os.getresuid         os.sep               os.unsetenv

os.O_RDONLY          os.devnull           os.getsid            os.setegid           os.urandom

os.O_RDWR            os.dup               os.getuid            os.seteuid           os.utime

os.O_RSYNC           os.dup2              os.initgroups        os.setgid            os.wait

os.O_SYNC            os.environ           os.isatty            os.setgroups         os.wait3

os.O_TRUNC           os.errno             os.kill              os.setpgid           os.wait4

os.O_WRONLY          os.error             os.killpg            os.setpgrp           os.waitpid

os.P_NOWAIT          os.execl             os.lchown            os.setregid          os.walk

os.P_NOWAITO         os.execle            os.linesep           os.setresgid         os.write

os.P_WAIT            os.execlp            os.link              os.setresuid

os.R_OK              os.execlpe           os.listdir           os.setreuid

os.SEEK_CUR          os.execv             os.lseek             os.setsid

与目录相关:

os.chdir(path)(改变当前工作目录)

os.fchdir(fildes)(改变当前的工作目录到由文件描述符fd表示的目录,描述符必须是指向一个打开的目录而不是一个打开的文件)

os.chroot(path)(设定当前进程的根目录)

os.listdir(path)(显示指定目录下的所有文件名)

os.mkdir(path[,mode=0777])(创建指定目录)

os.getcwd()(获取当前目录路径)

os.rmdir(path)(删除目录)

os.removedirs(path)(删除多级目录,类似rm -rf)

os.stat(path)

与文件相关:

os.remove(path)(删除文件,同os.unlink(path))

os.unlink(path)(删除链接文件,Remove a file (same asremove(path)))

os.rename(old.new)(重命名文件或目录Rename a file or directory.)

os.stat(path)(返回文件状态信息Perform a stat system call on the given path.)

os.symlink(src,dst)(创建链接文件)

os.utime(path,None)(更新文件时间戳为当前时间,访问时间和修改时间,set theaccess and modified times to the current time)

os.utime(path,(atime,mtime))       (更新文件时间为指定时间,Set the access and modified time of the file to the given values)

os.tmpfile()(创建一临时文件,Create a temporary file with no directory entries.)

os.mkfifo(filename[,mode=0666])(创建命名管道)

os.mknod(filename[,mode=0600,device])(Create a filesystem node (file,device special file or named pipe)named filename.创建设备文件)

os.makedev(major,minor)(根据指定的主设备号、次设备号创建设备,Composes a rawdevice number from the major and minor device numbers.)

os.major(device)(根据指定的设备获取主设备号,Extracts a devicemajor number from a raw device number.)

os.minor(device)(根据指定的设备获取次设备号,Extracts a deviceminor number from a raw device number.)

os.walk(top,topdown=True,onerror=None,followlinks=False)(将多级目录生成元组,子目录及其下的文件分别是列表中的元素,Foreach directory in the directory tree rooted at top (including top itself, butexcluding ‘.‘ and ‘..‘), yields a 3-tuple)

举例:

In [2]: import os

In [3]: g1=os.walk(‘/tmp‘)

In [4]: g1.next()

Out[4]:

(‘/tmp‘,

[‘VMwareDnD‘, ‘.ICE-unix‘,‘pulse-MUK7gfWor9cA‘, ‘.esd-500‘],

[‘test.txt‘])

In [5]: g1.next()

Out[5]: (‘/tmp/VMwareDnD‘, [], [])

In [6]: g1.next()

Out[6]: (‘/tmp/.ICE-unix‘, [], [])

In [7]: g1.next()

Out[7]: (‘/tmp/pulse-MUK7gfWor9cA‘, [],[‘native‘])

与访问权限相关:

os.access(path,mode)(检查某用户对指定文件是否有访问权限,此处mode为用户的uid或gid,Use the real uid/gid to test for access to a path.)

os.chmod(path,mode)(修改权限,mode为0755,Change the access permissions of a file.)

os.chown(path,uid,gid)(修改指定文件的属主属组,Change the owner andgroup id of path to the numeric uid and gid.)

os.umask(new_mask)(修改默认权限模式,Set the current numericumask and return the previous umask.)

与文件描述符相关:

os.open(filename,flag[,mode=0777])(Open a file (for low level IO).)

os.read(fd,buffersize)(Read a file descriptor.)

os.write(fd,string)(Write a string to a filedescriptor.)

与文件路径相关:

In [5]: os.path.<TAB>

os.path.abspath                     os.path.getmtime                    os.path.relpath

os.path.altsep                      os.path.getsize                     os.path.samefile

os.path.basename                    os.path.isabs                       os.path.sameopenfile

os.path.commonprefix                os.path.isdir                       os.path.samestat

os.path.curdir                      os.path.isfile                      os.path.sep

os.path.defpath                     os.path.islink                      os.path.split

os.path.devnull                     os.path.ismount                     os.path.splitdrive

os.path.dirname                     os.path.join                        os.path.splitext

os.path.exists                      os.path.lexists                     os.path.stat

os.path.expanduser                  os.path.normcase                   os.path.supports_unicode_filenames

os.path.expandvars                  os.path.normpath                    os.path.sys

os.path.extsep                      os.path.os                          os.path.walk

os.path.genericpath                 os.path.pardir                      os.path.warnings

os.path.getatime                    os.path.pathsep

os.path.getctime                    os.path.realpath

os.path.basename(path)(路径基名,Returns the final component ofa pathname)

os.path.dirname(path)(路径目录名,Returns the directorycomponent of a pathname)

os.path.join(a,*p)(Join two or more pathnamecomponents, inserting ‘/‘ as needed.)

os.path.split(p)(返回dirname()、basename()结果的元组,Split a pathname.  Returns tuple "(head, tail)" where"tail" is everything after the final slash.  Either part may be empty.)

os.path.splitext(p)(返回filename文件名、文件扩展名extention(扩展名包括dot点)为元组,Split the extension from apathname.)

os.path.getatime(filename)(Return the last access time of afile, reported by os.stat())

os.path.getctime(filename)(Return the metadata change time ofa file, reported by os.stat().)

os.path.getmtime(filename)(Return the last modification timeof a file, reported by os.stat().)

os.path.getsize(filename)(Return the size of a file, reportedby os.stat().)

os.path.exists(path)(判断指定文件是否存在,Test whether a pathexists.  Returns False for brokensymbolic links)

os.path.isabs(s)(判断指定路径是否绝对路径,Test whether a path isabsolute)

os.path.isdir(s)(判断路径是否存在且为目录,Return true if thepathname refers to an existing directory.)

os.path.isfile(path)(判断文件是否存在且为普通文件,Test whether a pathis a regular file)

os.path.islink(path)(判断文件是否存在且为链接文件,Test whether a pathis a symbolic link)

os.path.ismount(path)(判断文件是否存在且为挂载点,Test whether a pathis a mount point)

os.path.samefile(f1,f2)(判断两个路径是否指向同一个文件,Test whether twopathnames reference the same actual file)

举例:

In [20]:dir1=os.path.dirname(‘/etc/sysconfig/network-scripts/ifcfg-eth0‘)

In [21]: print dir1

/etc/sysconfig/network-scripts

In [22]:file1=os.path.basename(‘/etc/sysconfig/network-scripts/ifcfg-eth0‘)

In [23]: print file1

ifcfg-eth0

[[email protected] ~]# mkdir /tmp/testdir

[[email protected] ~]# touch /root/test.txt

In [1]: import os

In [2]:dir1=os.path.dirname(‘/tmp/testdir‘)

In [3]:file1=os.path.basename(‘/root/test.txt‘)

In [4]: os.path.join(dir1,file1)

Out[4]: ‘/tmp/test.txt‘

In [9]: for file in os.listdir(‘/tmp‘):

print os.path.join(‘/tmp‘,file)

...:

/tmp/VMwareDnD

/tmp/testdir

/tmp/.ICE-unix

/tmp/pulse-MUK7gfWor9cA

/tmp/test.txt

/tmp/.esd-500

In [12]:os.path.split(‘/etc/sysconfig/network-scripts/ifcfg-eth0‘)

Out[12]: (‘/etc/sysconfig/network-scripts‘,‘ifcfg-eth0‘)

In [13]:os.path.splitext(‘/etc/sysconfig/network-scripts/ifcfg-eth0‘)

Out[13]: (‘/etc/sysconfig/network-scripts/ifcfg-eth0‘,‘‘)

In [15]: os.path.splitext(‘/root/test.txt‘)

Out[15]: (‘/root/test‘, ‘.txt‘)

举例(判断文件是否存在,存在则打开,可让用户通过键盘反复输入多行数据追加至文件中):

[[email protected] ~]# vim test.py

-------------------script start-------------------

#!/usr/bin/python2.7

#filename:test.py

import os

filename=‘/tmp/test.txt‘

if os.path.isfile(filename):

f1=open(filename,‘a+‘)

while True:

line=raw_input(‘Enter something:‘)

if line==‘q‘ or line==‘quit‘:

break

f1.write(line+‘\n‘)

f1.flush()

f1.close()

--------------------script end---------------------

[[email protected] ~]# chmod 755 test.py

[[email protected] ~]# ./test.py

Enter something:i am jowin

Enter something:who are you

Enter something:hehe

Enter something:q

[[email protected] ~]# cat /tmp/test.txt

i am jowin

who are you

hehe

pickle、marshal对象持久存储(保存了对象的原数据结构,流式化存在文件中):

DBM(仅写数据库,未实现流式化);shelve模块(既写入DB,又实现流式化);

In [1]: d1={‘x‘:1,‘y‘:2,‘z‘:3}

In [2]: f1=open(‘/tmp/test.txt‘,‘w+‘)

In [3]: f1.write(d1)   #(直接将对象写入文件会报错,要通过pickle或marshal实现)

---------------------------------------------------------------------------

TypeError                                 Traceback(most recent call last)

<ipython-input-3-03e18951d68d> in<module>()

----> 1 f1.write(d1)

TypeError: expected acharacter buffer object

In [4]: import pickle

In [5]: pickle.<TAB>

Display all 116 possibilities? (y or n)

pickle.APPEND                pickle.EXT4                  pickle.ModuleType            pickle.TUPLE

pickle.APPENDS               pickle.EllipsisType          pickle.NEWFALSE              pickle.TUPLE1

pickle.BINFLOAT              pickle.FALSE                 pickle.NEWOBJ                pickle.TUPLE2  ……

用法:

pickle.dump(obj,file,protocol=None)(将对象写入文件)

pickle.load(file)(将对象从文件中恢复,要使用变量引用否则得到的是内存地址)

In [6]: pickle.dump(d1,f1)

In [7]: f1.flush()

In [8]: f1.close()

[[email protected] ~]# cat /tmp/test.txt

(dp0

S‘y‘

p1

I2

sS‘x‘

p2

I1

sS‘z‘

p3

I3

s.

In [12]: f2=open(‘/tmp/test.txt‘)

In [13]: d2=pickle.load(f2)

In [14]: print d2

{‘y‘: 2, ‘x‘: 1, ‘z‘: 3}

时间: 2024-11-05 09:13:53

VII Python(3)基础知识的相关文章

VII python(1)基础知识

VII Python(1)基础知识 1989年诞生(同LinuxOS),google推崇,06年后才开始在中国流行,08年运维开始使用python www.python.org(主流OS默认配的python为2.6或2.7,最好在Ubuntu12.10上使用python,对于开发很方便,否则会浪费很多时间在装某一软件包) https://www.python.org/ftp/python/ Python(简单.容易上手.语法非常简明,任何功能都可实现:胶水语言,粘合剂,能与任何语言结合起来(如j

Python入门基础知识实例,值得收藏!

7月的编程语言指数榜已经发布,Python 在今年5月首次超越 Java 拿下榜首位置后,仍保持上涨趋势,正逐渐与 Java 拉开差距.(图为与去年 7 月数据对比) 上周为大家简单介绍了如何安装Python和配置环境?相信大家都将Python安装成功了吧~今天小白就为大家分享一些Python的基础知识,希望大家都能快速入门Python~ 1.在Python 语言中,对象是通过引用传递的. 在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量. 如:x=

Python 面向对象基础知识

面向对象基础知识 1.什么是面向对象编程? - 以前使用函数 - 类 + 对象 2.什么是类什么是对象,又有什么关系? class 类: def 函数1(): pass def 函数2(): pass # obj是对象,实例化的过程 obj = 类() obj.函数1() ========== 面向对象不好 ============ ========== 函数编程好 ============== - 有时候,函数编程能实现?比较麻烦. - 面向对象非常的简单就能实现. 3.什么时候适用面向对象?

Python爬虫基础知识及前期准备

学习爬虫有一小段时间了,于是决定把自己学爬虫时所学的,写过的代码以及看过的文档记录下来,权当小结.第一次写这些,如果有错误,请多指教. 首先我们需要了解一下什么是爬虫. 根据百度百科上给出的定义," 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本."简单来说,爬虫类似手动下载网页信息,比如小说.歌曲.说到这,或许会有疑问,既然这样,干嘛还去敲代码,直接人工处理不好吗?话是这么说,但如果下载的

10分钟学会Python函数基础知识

看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的

10分钟学会 Python 函数基础知识

一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的复用率了,整体代码看起来比较简练,没有那么臃肿了. 函数在Python中是最基本的程序结构,用来最大化地

python学习-基础知识-1

1.计算机历史 计算机使用高低电压的两种状态来描述信息.计算机可以理解的只有二进制数据即010100011....,1个比特位可以表示的状态只有2种,n个比特位可以表示的状态有2的n次方种. 所以如果想要描述天气状态:天晴.下雨.刮风.下雪.霜冻,则需要使用3个比特位. 2.编程语言历史 计算机只能理解二进制数据,二进制数据中蕴含了很多指令.操作.数据,计算机通过cpu直接运行二进制代码执行不同的功能,二进制代码被称为机器语言. 但是机器语言(二进制代码)对于人类而言可读性太差.编写太困难,所以

教你快速学会 Python 函数基础知识

一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的复用率了,整体代码看起来比较简练,没有那么臃肿了. 函数在Python中是最基本的程序结构,用来最大化地

python — 函数基础知识(一)

目录 1 面向过程编程与函数式编程 2 函数的基本结构 3 函数的参数 1 面向过程编程与函数式编程 截至目前我们所接触.所写的编程为:面向过程式编程[可读性差/可重用性差] # 面向过程编程 user_input = input('请输入角色:') if user_input == '管理员': import smtplib from email.mime.text import MIMEText from email.utils import formataddr msg = MIMETex

python小白基础知识1

1,python历史    宏观上:python2 与 python3 区别:        python2 源码不标准,混乱,重复代码太多,        python3 统一 标准,去除重复代码. 2,python的环境    编译型:一次性将所有程序编译成二进制文件.        缺点:开发效率低,不能跨平台.        优点:运行速度快.        :C,C++等等.        解释型:当程序执行时,一行一行的解释.        优点:开发效率高,可以跨平台.