第六章 异常和文件处理

来源:互联网 发布:linux 一直ping的命令 编辑:程序博客网 时间:2024/04/29 07:59
第六章 异常和文件处理
1、异常处理
Python 使用 try...except 来处理异常,使用 raise 来引发异常
>>> try:...     fsock = open("/notthere")       ... except IOError:                     ...     print "The file does not exist, exiting gracefully"... print "This line will always print" The file does not exist, exiting gracefullyThis line will always print

2、与文件对象共事
1)打开文件
open,用来打开在磁盘上的文件
open 返回一个文件对象,它拥有一些方法和属性,可以得到被打开文件的信息,以及对被打开文件进行操作
>>> f = open("/music/_singles/kairo.mp3", "rb")     #open 方法可以接收三个参数:文件名、模式和缓冲区参数 >>> f.mode                                      'rb'>>> f.name                                      '/music/_singles/kairo.mp3'
2)读取文件
>>> f.seek(-128, 2)     #移动到另一个位置,0:绝对位置 (从文件起始处算起),1 :相对位置 (从当前位置算起),还有 2 :相对于文件尾的位置 >>> f.tell()     #被打开文件中的当前位置              7542909>>> tagData = f.read(128)     #读取指定个数的字节,并且返回含有读取数据的字符串 
3)关闭文件
>>> f.close()     #刷新被缓冲的系统还未写入的输出 (如果有的话),并且释放系统资源      >>> f<closed file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988>>>> f.closed     #文件对象的 closed 属性表示对象是打开还是关闭了文件       True
4)处理 I/O 错误
try:                                            fsock = open(filename, "rb", 0)             try:                                           fsock.seek(-128, 2)                         tagdata = fsock.read(128)               finally:      #在 finally 块中的代码将总是 被执行,甚至某些东西在 try 块中引发一个异常也会执行                                       fsock.close()                          .            .            .        except IOError:                                 pass
5)写入文件
两种基本的文件模式:
追加 (Append) 模式将数据追加到文件尾
写入 (write) 模式将覆盖文件的原有内容
>>> logfile = open('test.log', 'w') >>> logfile.write('test succeeded')     #使用 open 返回的文件对象的 write 方法向一个新打开的文件添加数据 >>> logfile.close()>>> print file('test.log').read()   test succeeded>>> logfile = open('test.log', 'a')     #"a" 参数的意思是为追加目的打开文件 >>> logfile.write('line 2')>>> logfile.close()>>> print file('test.log').read()   test succeededline 2

3、for循环
for 循环简单地在一个列表上循环,与 list 解析的工作方式相同
>>> li = ['a', 'b', 'e']>>> for s in li:     #s 将从第一个元素开始依次接收每个元素的值         ...     print s          abe>>> print "\n".join(li)  abe>>> for i in range(len(li)):       ...     print li[i]abc

4、使用 sys.modules
sys.modules 是一个字典,它包含了从 Python 开始运行起,被导入的所有模块
 __module__ 类属性获取已知类所在的模块

5、与目录共事
1)构造路径名
>>> import os>>> os.path.join("c:\\music\\ap\\", "mahadeva.mp3")     #join 函数把一个或多个部分路径名连接成一个路径名  'c:\\music\\ap\\mahadeva.mp3'>>> os.path.expanduser("~")     #表示当前用户根目录的路径名                         'c:\\Documents and Settings\\mpilgrim\\My Documents'
2)分割路径名
>>> os.path.split("c:\\music\\ap\\mahadeva.mp3")     #split 函数对一个全路径名进行分割,返回一个包含路径和文件名的 tuple              ('c:\\music\\ap', 'mahadeva.mp3')>>> (filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3")     #返回值赋值给一个两个变量的 tuple >>> filepath                                                            'c:\\music\\ap'>>> filename                                                            'mahadeva.mp3'>>> (shortname, extension) = os.path.splitext(filename)     #splitext 函数,可以用来对文件名进行分割,并且返回一个包含了文件名和文件扩展名的 tuple                 >>> shortname'mahadeva'>>> extension'.mp3'
3)列出目录
>>> os.listdir("c:\\music\\_singles\\")     #返回目录中的所有文件和子目录              ['a_time_long_forgotten_con.mp3', 'hellraiser.mp3']
os.path.isfile:如果路径表示一个文件,则返回 1,否则为 0
os.path.isdir:当路径表示一个目录,则返回 1,否则为 0
4)使用 glob 列出目录
>>> glob.glob('c:\\music\\_singles\\s*.mp3')      #接受一个通配符并且返回文件的或目录的完整路径与之匹         ['c:\\music\\_singles\\sidewinder.mp3','c:\\music\\_singles\\spinning.mp3']