第7章 文件操作
7.1 假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。
答:
f = open(r'd:\\1.txt','r') s = f.readlines() f.close()
r = [i.swapcase() for i in s]
f = open(r'd:\\2.txt','w') f.writelines(r) f.close()
7.2 编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。 答:Python 3.4.2代码 import pickle
d = {'张三':98,'李四':90,'王五':100} print(d)
f = open('score.dat','wb') pickle.dump(1,f) pickle.dump(d,f) f.close
f = open('score.dat','rb') pickle.load(f) d = pickle.load(f) f.close() print(d)
7.3 使用shutil模块中的move()方法进行文件移动。 答:
>>> import shutil
>>> shutil.move(r'd:\\1.txt', r'e:\\1.txt') 'e:\\\\1.txt'
7.4 简单解释文本文件与二进制文件的区别。 答:
(1)文本文件
文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\\n'结尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字、数字字符串。文本文件可以使用字处理软件如gedit、记事本进行编辑。
(2)二进制文件
二进制文件把对象内容以字节串(bytes)进行存储,无法用记事本或其他普通字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行解码后读取、显示、修改或执行。常见的如图形图像文件、音视频文件、可执行文件、资源文件、各种数据库文件、各类office文档等都属于二进制文件。
7.5 编写代码,将当前工作目录修改为“C:\\”,并验证,最后将当前工作目录恢复为原来的目录。
答:
>>> import os >>> os.getcwd() 'C:\\\\Python34'
>>> os.chdir(r'c:\\\\') >>> os.getcwd() 'c:\\\\'
>>> os.chdir(r'c:\\Python34') >>> os.getcwd() 'c:\\\\Python34'
7.6 编写程序,用户输入一个目录和一个文件名,搜索该目录及其子目录中是否存在该文件。
答:
1)Python 3.4.2代码 import sys import os
directory = sys.argv[1] filename = sys.argv[2] paths = os.walk(directory) for root,dirs,files in paths: if filename in files: print('Yes')
break else:
print('No')
2)Python 2.7.8代码 import sys import os
directory = sys.argv[1] filename = sys.argv[2] paths = os.walk(directory) for root,dirs,files in paths: if filename in files: print 'Yes' break else:
print 'No'
7.7 文件对象的 flush() 方法用来把缓冲区的内容写入文件,但不关闭文件。 7.8 os.path模块中的 isfile() 方法用来测试指定的路径是否为文件。
7.9 os模块的 listdir() 方法用来返回包含指定文件夹中所有文件和子文件夹的列表。
第8章 异常处理结构与程序调试
8.1 Python异常处理结构有哪几种形式? 答:
比较常用的形式有: 1)标准异常处理结构
try: try块 #被监控的语句,可能会引发异常 except Exception[, reason]: except块 #处理异常的代码
如果需要捕获所有异常时,可以使用BaseException,代码格式如下: try: ??
except BaseException, e: except块 #处理所有错误
上面的结构可以捕获所有异常,尽管这样做很安全,但是一般并不建议这样做。对于异常处理结构,一般的建议是尽量显式捕捉可能会出现的异常并且有针对性地编写代码进行处理,因为在实际应用开发中,很难使用同一段代码去处理所有类型的异常。当然,为了避免遗漏没有得到处理的异常干扰程序的正常执行,在捕捉了所有可能想到的异常之后,您也可以使用异常处理结构的最后一个except来捕捉BaseException。
2)另外一种常用的异常处理结构是try...except...else...语句。
3)在实际开发中,同一段代码可能会抛出多个异常,需要针对不同的异常类型进行相应的处理。为了支持多个异常的捕捉和处理,Python提供了带有多个except的异常处理结构,这类似于多分支选择结构,一旦某个except捕获了异常,则后面剩余的except子句将不会再执行。语法为: try: try块 except Exception1: except块1 except Exception2: except块2
#被监控的语句
#处理异常1的语句 #处理异常2的语句
4)将要捕获的异常写在一个元组中,可以使用一个except语句捕获多个异常,并且共用同一段异常处理代码,当然,除非确定要捕获的多个异常可以使用同一段代码来处理,并
不建议这样做。
5)最后一种常用的异常处理结构是try...except...finally...结构。在该结构中,finally子句中的内存无论是否发生异常都会执行,常用来做一些清理工作以释放try子句中申请的资源。语法如下: try: ?? finally:
......
#无论如何都会执行的代码
8.2 异常和错误有什么区别? 答:
异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。
8.3 使用pdb模块进行Python程序调试主要有哪几种用法? 答:主要有三种方式,
1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能
在程序中首先导入pdb模块,然后使用pdb.set_trace()在需要的位置设置断点。如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。
3)使用命令行调试程序
在命令行提示符下执行“python –m pdb 脚本文件名”,则直接进入调试环境;当调试结束或程序正常结束以后,pdb将重启该程序。
8.4 Python内建异常类的基类是 BaseException 。 8.5 断言语句的语法为 assert 。 8.6 Python上下文管理语句是 with 。