当前位置:首页 >> 理学 >>

python核心编程第二版课后题答案第九章


9.11 练习 9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做 Python , Perl, Tcl, 等大多脚本文件的注释符号. 附加题: 处理不是第一个字符开头的注释. with open("data.txt") as fobj: for eachline in fobj: if not eachline.startswith("#"): print eachline 附件题看不懂。。。。。

9–2. 文件访问. 提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行. filename = raw_input("please enter the filename:") num = int(raw_input("please enter the line number:")) for eachline in open(filename): if num: print eachline num -= 1 else: break 程序输出: >>> please enter the filename:data.txt please enter the line number:5 #第一行 hello world #第二行 i love this world #第三行

9–3. 文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数. filename = raw_input("please enter the filename:") print len([line for line in open(filename)]) 程序输出: >>>

please enter the filename:data.txt 8

9–4. 文件访问. 写一个逐页显示文本文件的程序. 提示输入一个文件名, 每次显示文 本文件的 25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行. with open("data.txt","a+") as fobj: for i in range(100): fobj.write(str(i)) fobj.write("\n") with open("data.txt") as fobj: num = 1 for eachline in fobj: if num % 26 != 0: print eachline, num += 1 else: go = raw_input("continue(c to continue, other to quit):") num += 1 if go != "c": break

9–6. 文件比较. 写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行 号和列号. fobj1 = open("data1.txt") fobj2 = open("data2.txt") lines1 = fobj1.readlines() lines2 = fobj2.readlines() for i in range(min(len(lines1), len(lines2))): if lines1[i] != lines2[i]: print i break

9–7. 解析文件. Win32 用户: 创建一个用来解析 Windows .ini 文件的程序. 这道题我没看懂,如何解析???

9–9. Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是 否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会生成一个漂亮的清单. 里边列出哪些模块有文档字符串, 以及文档字符串的内容. 清单最后附上那些没有文档字符串模块的名字. 附加题: 提取标准库中各模块内全部类(class)和函数的文档. 这道题忽悠了我一个晚上。第一:根本就不存在__doc__的字符串,当我们运行模 块.__doc__的时候,实际上是读取开头的字符串。所以我们要判断是开头是否存在“”“字 符串”“”这样的格式。 程序如下: import os import sys num = [] """将所有路径文件名全部提出出来""" def fun(dirName): for i in os.listdir(dirName): if os.path.isdir(dirName + "\\" + i): fun(dirName + "\\" + i) else: num.append(dirName + "\\" + i) fun(r"C:\Python27\Lib") hasDoc = False strTemp = "" fileobj1 = open("hasdoc.txt","a+") fileobj2 = open("nodoc.txt","a+") for i in num: fobj = open(i) for eachline in fobj: if (not hasDoc) and eachline.startswith('"""'): hasDoc = True elif hasDoc and eachline.startswith('"""'): hasDoc = False strTemp += eachline break if hasDoc: strTemp += eachline else: break if strTemp != "": fileobj1.write("文件名:" + i + "\n") fileobj1.write("__doc__ is:" + "\n")

fileobj1.write(strTemp + "\n") else: fileobj2.write("文件名:" + i + "\n") strTemp = "" fobj.close() fileobj1.close() fileobj2.close() 今天头好疼!!真的好疼,一点看书的欲望都没有。 最近还花了点时间学习 wxpython, 专门用来对付习题 9-10, 9-11 这种图形界面的设计, 但是发现学习的蛋疼,可能我这人不太喜欢用 UI 这些东西吧。 所以,习题 9-10,9-11,9-12 就不做了。

9–13. 命令行参数 a) 什么是命令行参数, 它们有什么用? b) 写一个程序, 打印出所有的命令行参数. a)跟随着命令写入的参数,主要用于 linux 下运行程序 #coding=utf-8 import sys for i in range( 1, len( sys.argv ) ): print "parameter %d : %s" % ( i, sys.argv[i] ) 程序输入输出:

习题 9-14 # coding=utf-8 """计算器程序,模仿内建函数 eval()""" import sys import os

def new_eval( num ): if num[1] == "+": return int( num[0] ) + int( num[2] ) elif num[1] == "-": return int( num[0] ) - int( num[2] ) elif num[1] == "*": return int( num[0] ) * int( num[2] ) elif num[1] == "/": return int( num[0] ) / int( num[2] ) elif num[1] == "%": return int( num[0] ) % int( num[2] ) elif num[1] == "**": return int( num[0] ) ** int( num[2] ) else: return "error operator" if __name__ == "__main__": if sys.argv[1:][0] == "print": with open( "result.txt" ) as fobj: print fobj.read() os.remove("result.txt") else: with open( "result.txt", "a+" ) as fobj: fobj.write("".join(sys.argv[1:])) fobj.write("\n") fobj.write( str(new_eval( sys.argv[1:] ) )) fobj.write("\n") print "the result is : %d" % ( new_eval( sys.argv[1:] ) ) 不要小看任何一个小程序,这段代码我写了很久,很多细节的东西都没有掌握,也可能 是太久没写 python 代码的缘故吧。 程序输入输出:

9–15. 复制文件. 提示输入两个文件名(或者使用命令行参数). 把第一个文件的内容复 制到第二个文件中去. # coding=utf-8 file1 = raw_input( "please enter file1:" ) file2 = raw_input( "please enter file2:" ) with open( file1 ) as fobj1: with open( file2 , "w" ) as fobj2: for i in fobj1: fobj2.write( i ) with open(file2) as fobj2: print fobj2.read() 程序输入输出: >>> please enter file1:hello.txt please enter file2:world.txt hello world 无论如何,都要坚持下去 加油

9–16. 文本处理. 人们输入的文字常常超过屏幕的最大宽度. 编写一个程序, 在一个文 本文件中查找长度大于 80 个字符的文本行. 从最接近 80 个字符的单词断行, 把剩 余文件插入到下一行处.程序执行完毕后, 应该没有超过 80 个字符的文本行了. import os file1 = raw_input("please enter the file:")

with open(file1) as fobj1: with open("temp.txt","w") as fobj2: for i in fobj1: if len(i) > 80: num = list(i) count = len(num) / 80 for i in range(count): fobj2.write("".join(num[:79])) fobj2.write("\n") num = num[79:] fobj2.write("".join(num)) else: fobj2.write(i) fobj2.write("\n") with open("temp.txt") as fobj2: with open(file1,"w") as fobj1: for i in fobj2: fobj1.write(i) os.remove("temp.txt") 9–17. 文本处理. 创建一个原始的文本文件编辑器. 你的程序应该是菜单驱动的, 有如 下 这些选项: 1) 创建文件(提示输入文件名和任意行的文本输入), 2) 显示文件(把文件的内容显示到屏幕), 3) 编辑文件(提示输入要修改的行, 然后让用户进行修改), 4) 保存文件, 以及 5) 退出. class fileEdit(object): def newFile(self, fileName, fileText): with open(fileName, "a+") as fobj: fobj.write(fileText) def showFile(self, fileName): strTemp = "" with open(fileName) as fobj: for i in fobj: strTemp += i return strTemp def editFile(self, fileName, lineNum, newText): lines = [] with open(fileName) as fobj: lines = fobj.readlines()

if lineNum > len(lines): return False lines[lineNum - 1] = newText with open(fileName,"w") as fobj: fobj.writelines(lines) if __name__ == "__main__": while True: fobj = fileEdit() print "n to newfile" print "s to showfile" print "e to editfile" print "and q to quit file" choice = raw_input("please enter the choice:") if choice.lower() == "q": break if choice.lower() not in ["n","s","e"]: continue else: if choice.lower() == "n": fileName = raw_input("please enter the filename:") fileText = "" while True: Text = raw_input("please enter the text(q to quit):") if Text.lower() == "q": break fileText += Text fileText += "\n" fobj.newFile(fileName, fileText) elif choice.lower() == "s": fileName = raw_input("please enter the filename:") print fobj.showFile(fileName) elif choice.lower() == "e": fileName = raw_input("please enter the filename:") lineNum = int(raw_input("please enter the lineNumber:")) lineText = raw_input("please enter the newText:") fobj.editFile(fileName, lineNum, lineText) 程序输入输出: >>>

n to newfile s to showfile e to editfile and q to quit file please enter the choice:n please enter the filename:hello.txt please enter the text(q to quit):hello world please enter the text(q to quit):i love this world please enter the text(q to quit):and i love python too please enter the text(q to quit):q n to newfile s to showfile e to editfile and q to quit file please enter the choice:e please enter the filename:hello.txt please enter the lineNumber:3 please enter the newText:i love you n to newfile s to showfile e to editfile and q to quit file please enter the choice:s please enter the filename:hello.txt hello world i love this world i love you n to newfile s to showfile e to editfile and q to quit file please enter the choice:q 9–18. 搜索文件. 提示输入一个字节值(0 - 255)和一个文件名. 显示该字符在文件中出 现的次数. fileName = raw_input("please enter the fileName:") fileCh = raw_input("please enter the character:") countNum = 0 with open(fileName) as fobj: for i in fobj: countNum += i.count(fileCh)

print "character %s occurs:%d" % (fileCh, countNum) 程序输入输出: >>> please enter the fileName:hello.txt please enter the character:l character l occurs:6 9–19. 创建文件. 创建前一个问题的辅助程序. 创建一个随机字节的二进制数据文件, 但 某一特定字节会在文件中出现指定的次数. 该程序接受三个参数: 1) 一个字节值( 0 - 255 ), 2) 该字符在数据文件中出现的次数, 以及 3) 数据文件的总字节长度. 这道题很难。。。 想了半天,解决方法倒是有,但是不知道怎么去写。 import os import random def fun(ch, countNum, length): firstLength = length num = [] while firstLength - countNum: chara = random.choice(xrange(255)) if ch == chara: continue else: num.append(chara) firstLength -= 1 for i in range(countNum): num.append(ch) new_num = [] while length: i = int(random.random() * length) new_num.append(num[i]) del num[i] length -= 1 return new_num if __name__ == "__main__": num = fun(25, 10, 15) for item in num: print "{0:b}".format(item) 程序显示,二进制 25 将会被现实 10 次,而且是随机排列的:

>>> 1100011 11001 11001 11001 11001 11001 10111 11101000 100100 11001 11001 10000101 11001 11001 11001

9–20. 压缩文件. 写一小段代码, 压缩/解压缩 gzip 或 bzip 格式的文件. 可以使用命 令行下的 gzip 或 bzip2 以及 GUI 程序 PowerArchiver , StuffIt , 或 WinZip 来 确认你的 Python 支持这两个库. import zipfile with zipfile.ZipFile("hello.zip","w") as myzip: myzip.write("hello.txt") 9–21. ZIP 归档文件. 创建一个程序, 可以往 ZIP 归档文件加入文件, 或从中提取文 件,有可能的话, 加入创建 ZIP 归档文件的功能. 这道题,坦白说不会。从 Google 上很容易找到答案,然后找到答案后好好研究一遍。 import os import zipfile def zipdir(path, zip): for root, dirs, files in os.walk(path): for file in files: zip.write(os.path.join(root, file)) if __name__ == '__main__': zip = zipfile.ZipFile('Python.zip', 'w') zipdir('C:\\Python27\\', zip) zip.close()

整体思想和上面的一致,只是增加了路径的查询罢了。


相关文章:
python核心编程第二版课后题答案第九章.doc
核心| 编程| python核心编程第二版课后题答案第九章_理学_高等教育_教育
PYTHON核心编程第二版课后题答案第八章.pdf
PYTHON核心编程第二版课后题答案第八章 - def loop(f, t, i
python核心编程第二版第9章习题答案.doc
python核心编程第二版第9章习题答案 - 91. 文件过滤. 显示一个文件
PYTHON核心编程第二版课后题答案第六章.pdf
PYTHON核心编程第二版课后题答案第六章 - def idcheck(): &
PYTHON核心编程第二版第8章习题答案.pdf
PYTHON核心编程第二版第8章习题答案 - 8-1.条件语句。请看下边的代码:
PYTHON核心编程第二版课后题答案第十五章.pdf
PYTHON核心编程第二版课后题答案第十五章 - #15-1 识别下列字符串:“
Python核心编程(第二版)-习题答案_图文.pdf
Python核心编程(第二版)-习题答案_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载 | 举报文档 Python核心编程(第二版)-习题答案_计算机软件及...
PYTHON核心编程(第二版)第十章习题答案.pdf
PYTHON核心编程(第二版)第十章习题答案_电子/电路_工程科技_专业资料。1
python核心编程第二版第8章习题答案.doc
python核心编程第二版第8章习题答案_教育学_高等教育_教育专区。python核心编程第二版第8章习题答案 8-1.条件语句。请看下边的代码: # statement A if x > ...
Python核心编程(第二版)第十章习题答案.doc
Python核心编程(第二版)第十章习题答案 - 10.1 引发异常。以下的哪个
Python核心编程第二版-习题答案_图文.pdf
Python核心编程第二版-习题答案 - Chun_AppA.fm Page 1
python核心编程第二版课后题答案第八章.doc
python核心编程第二版课后题答案第八章_工学_高等教育_教育专区。python核心编程第二版课后题答案第八章,转载,仅供参考 def loop(f, t, i): '''8-2 输入...
python核心编程第二版课后题答案第六章.doc
python核心编程第二版课后题答案第六章_工学_高等教育_教育专区。pytho
python核心编程第二版课后题答案第十五章.doc
python核心编程第二版课后题答案第十五章_工学_高等教育_教育专区。pyth
Python 核心编程 第十三章习题答案.pdf
Python 核心编程 第十三章习题答案_教育学_高等教育_教育专区。#!/us
Python核心编程第三版课后习题解答(第四章).doc
Python核心编程第版课后习题解答(第四章)_计算机软件及应用_IT/计算机_专业资料。Python核心编程第版第四章课后习题解答 Python 核心编程第版课后习题解答...
python核心编程第二版第2章习题答案.doc
python核心编程第二版第2章习题答案_教育学_高等教育_教育专区。python核心编程第二版第2章习题答案 2-1.变量,print 和字符串格式化操作符。启动交互式解释器,给...
python核心编程第二版课后题答案第五章.doc
python核心编程第二版课后题答案第五章_工学_高等教育_教育专区。pytho
PYTHON核心编程第二版第2章习题答案.pdf
PYTHON核心编程第二版第2章习题答案 - 2-1.变量,print 和字符串
Python核心第二版习题答案.doc
Python核心第二版习题答案_文学_高等教育_教育专区。python核心编程第二版 答案 (更新中) Pytho 核心编程第二版(第二,三,四,五章)答案 第二章 2-3 a=int(...
更多相关文章: