9–1.文件过滤.显示一个文件的所有行,忽略以井号(#)开头的行.这个字符被用做Python,Perl,Tcl,等大多脚本文件的注释符号.附加题:处理不是第一个字符开头的注释.答案:f=open('test1.txt','r')foreachlineinf:ifeachline[0]=='#':continueelif'#'ineachline:loc=eachline.find('#')printeachline[:loc]else:printeachline,9–2.文件访问.提示输入数字N和文件F,然后显示文件F的前N行.答案:N=int(raw_input('Enteranumber:'))f=raw_input('Enterfilename:')f1=open(f,'r')allline=f1.readlines()f1.close()foriinrange(N):printallline[i],9–3.文件信息.提示输入一个文件名,然后显示这个文本文件的总行数.答案:f=raw_input('Enterfilename:')f1=open(f,'r')sum=0foriinf1:sum+=1printsumf=raw_input('Enterfilename:')f1=open(f,'r')sum=0foriinf1:sum+=1printsum方法二:f=raw_input('Enterfilename:')f1=open(f,'r')allline=f1.readlines()f1.close()printlen(allline)9–4.文件访问.写一个逐页显示文本文件的程序.提示输入一个文件名,每次显示文本文件的25行,暂停并向用户提示按任意键继续.,按键后继续执行.答案:f=raw_input('Enterfilename:')f1=open(f,'r')allline=f1.readlines()f1.close()sum=0foriinallline:printi,sum+=1ifsum==25:a=raw_input(pressanykeytocontinue:)sum=0方法二importosF=raw_input('plsinputafilename:')n=0f=open(F,'r')foriinf:printi,n+=1ifn==25:n=0os.system('pause')f.close()9-5考试成绩,改进你的考试成绩问题(练习5-3和6-4),要求能从多个文件中读入考试成绩。文件的数据格式由你自己决定。答案:f=open('test1.txt','r')scores=[]foriinf:if0=int(i.strip())=100:scores.append(int(i.strip()))else:print'scorewrong,pleaseagain'ifint(i.strip())60:print'scoreisE',ielifint(i.strip())70:print'scoreisD',ielifint(i.strip())80:print'scoreisC',ielifint(i.strip())90:print'scoreisB',ielse:print'scoreisA',if.close()print'averagescoreis%.2f'%(sum(scores)/len(scores))9–6.文件比较.写一个比较两个文本文件的程序.如果不同,给出第一个不同处的行号和列号.答案:f1=raw_input('Enterafilename:')f2=raw_input('Enterafilename:')F1=open(f1,'r')F2=open(f2,'r')F1allline=F1.readlines()F2allline=F2.readlines()F1.close()F2.close()len1=len(F1allline)len2=len(F2allline)minlen1=min(len1,len2)foriinrange(minlen1):printF1allline[i],F2allline[i]ifF1allline[i]!=F2allline[i]:minlen2=min(len(F1allline[i]),len(F2allline[i]))forjinrange(minlen2):ifF1allline[i][j]!=F2allline[i][j]:print'rowis%d,columnis%d'%(i+1,j+1)breakelse:continueelse:print'theyareequal\n'9–7.解析文件.Win32用户:创建一个用来解析Windows.ini文件的程序.POSIX用户:创建一个解析/etc/serves文件的程序.其它平台用户:写一个解析特定结构的系统配置文件的程序.答案:这题没看懂,抄的别人option={}f=open(r'c:\windows\win.ini')forlineinf:ifline.startswith(';'):continueifline.startswith('['):iterm=[]name=line[1:line.rfind(']')]option.setdefault(name,iterm)continueif'='inline:option[name].append(line.strip())printoption9–8.模块研究.提取模块的属性资料.提示用户输入一个模块名(或者从命令行接受输入).然后使用dir()和其它内建函数提取模块的属性,显示它们的名字,类型,值.答案:m=raw_input('Enteramodulename:')module=__import__(m)m1=dir(module)printm1foriinm1:print'name:',iprint'tyoe:',type(getattr(module,i))print'value:',getattr(module,i)print9–9.Python文档字符串。进入Python标准库所在的目录。检查每个.py文件看是否有__doc__字符串,如果有,对其格式进行适当的整理归类.你的程序执行完毕后,应该会生成一个漂亮的清单.里边列出哪些模块有文档字符串,以及文档字符串的内容.清单最后附上那些没有文档字符串模块的名字.附加题:提取标准库中各模块内全部类(class)和函数的文档.答案:这是入口#coding:utf-8importosimportsysnum=[]'''将所有路径文件名全部提取出来'''deffun(dirName):foriinos.listdir(dirName):ifos.path.isdir(dirName+\\+i):fun(dirName+'\\'+i)else:num.append(dirName+'\\'+i)fun(r'c:\python27\Lib')hasDoc=FalsestrTemp=''fileobj1=open('hasdoc.txt','a+')fileobj2=open('nodoc.txt','a+')foriinnum:printifobj=open(i)foreachlineinfobj:if(nothasDoc)andeachline.startswith(''):hasDoc=TrueelifhasDocandeachline.startswith(''):hasDoc=FalsestrTemp+=eachlinebreakifhasDoc:strTemp+=eachlineelse:breakifstrTemp!=:fileobj1.write('filename:'+i+'\n')fileobj1.write(__doc__+\n)fileobj1.write(strTemp+'\n')else:fileobj2.write('文件名:'+i+'\n')strTemp=fobj.close()fileobj1.close()fileobj2.close()9-10.家庭理财。创建一个家庭理财程序。你的程序需要处理储蓄、支票、金融市场,定期存款等多种账户。为每种账户提供一个菜单操作界面,要有存款、取款、借、贷等操作。另外还要提供一个取消操作选项。用户退出这个程序时相关数据应该保存到文件里取(出于备份的目的,程序执行过程中也要备份)。答案:太难了,不会。9-11.Web站点地址.a)编写一个URL书签管理程序.使用基于文本的菜单,用户可以添加,修改或者删除书签数据项.书签数据项中包含站点的名称,URL地址,以及一行简单说明(可选).另外提供检索功能,可以根据检索关键字在站点名称和URL两部分查找可能的匹配.程序退出时把数据保存到一个磁盘文件中去;再次执行时候加载保存的数据.b)改进a)的解决方案,把书签输出到一个合法且语法正确的HTML文件(.html或htm)中,这样用户就可以使用浏览器查看自己的书签清单.另外提供创建文件夹功能,对相关的书签进行分组管理.附加题:请阅读Python的re模块了解有关正则表达式的资料,使用正则表达式对用户输入的URL进行验证.答案:不会做,参考自importre,osdefcheckurl(url):regex=re.compile(r'^(?:http|ftp)?://'#(?:(?:[A-Z0-9](?:[A-Z0-9]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'r'localhost'#localhostr'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'r'(?::\d+)?'r'(?:/?|[/?]\S+)$',re.IGNORECASE)ifregex.match(url):returnTrueelse:returnFalsedefgeturl():name=raw_input('plsinputaurlname:')while1:url=raw_input('plsinputaurladdress:')ifcheckurl(url):breakelse:print'wrongurlformat,plsinputagain'mark=raw_input('plsinputaurlmark:')folder=raw_input('plsinputaurlfolder:')return(name,url,mark,folder)defload(filename):f=open(filename,'a+')bmlist=f.readlines()f.close()returnbmlistdefsave(bmlist,filename):f=open(filename,'w+')forlineinbmlist:iflen(line):continuef.write(line)f.close()defadd(bmlist,name,url,mark,folder='default'):bookmark=''bookmark=name+';'+url+';'+mark+';'+folder+os.linesepifbookmarknotinbmlist:bmlist.append(bookmark)defmodify(bmlist,index,name,url,mark,folder):bookmark=''bookmark=name+';'+url+';'+mark+';'+folder+os.linesepbmlist[index]=bkdefdelbm(bmlist,index):bmlist.pop(index)deffindbk(bmlis