《Python核心编程》第9章 习题

9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.附加题: 处理不是第一个字符开头的注释.

f=open('test.txt','r')
for eachline in f:
    if eachline.startswith('#'):
        continue
    elif '#' in eachline:
        loc=eachline.find('#')
        print eachline[:loc]
    else:
        print eachline,
f.close()
9–2. 文件访问. 提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行.
N=int(raw_input('pls input a number:'))
F=raw_input('pls input a file name:')
f=open(F,'r')
alllines=f.readlines()
f.close()
for i in range(N):
    print alllines[i],
9–3. 文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数.
F=raw_input('pls input a file name:')
f=open(F,'r')
alllines=f.readlines()
f.close()
print len(alllines)
9–4. 文件访问. 

写一个逐页显示文本文件的程序. 提示输入一个文件名, 每次显示文本文件的 25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行.

import os
F=raw_input('pls input a file name:')
n=0
f=open(F,'r')
for i in f:
    print i,
    n+=1
    if n==25:
        n=0
        os.system('pause')
f.close()
9-5 考试成绩,改进你的考试成绩问题(练习5-3和6-4),要求能从多个文件中读入考试成绩。文件的数据格式由你自己决定。

f=open('test.txt','r')
scores=[]
for i in f:
    if 0<=int(i.strip())<=100:
        scores.append(int(i.strip()))
    if int(i.strip())<60:
         print 'score is F' ,i
    elif 60<=int(i.strip())<=69:
         print 'score is D',i
    elif 70<=int(i.strip())<=79:
         print 'score is C',i
    elif 80<=int(i.strip())<=89:
         print 'score is B',i
    elif 90<=int(i.strip())<=100:
         print 'score is A',i
    else:
         print 'score wrong,please input again',i
f.close()
print 'average score is %f' %(sum(scores)//len(scores))
9–6. 文件比较. 写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和列号.
F1=raw_input('pls input a file name:')
F2=raw_input('pls input a file name:')
f1=open(F1,'r')
f1alllines=f1.readlines()
f1.close()
f2=open(F2,'r')
f2alllines=f2.readlines()
f2.close()
len1=len(f1alllines)
len2=len(f2alllines)
smallfile=len1 if len1<=len2 else len2
for i in range(smallfile):
    if cmp(f1alllines[i],f2alllines[i])!=0:
        print 'row is %d ' %(i+1)
        len3=len(f1alllines[i])
        len4=len(f2alllines[i])
        smallstr=len3 if len3<=len4 else len4
        for j in range(smallstr):
            if cmp(f1alllines[i][j],f2alllines[i][j])!=0:
                print 'column is %d ' %(j+1)
                break
        break
else:
    if len1==len2:
        print '2 files equal'
    else:
        print 'row is %d ' %(i+2)
9–7. 解析文件. Win32 用户: 创建一个用来解析 Windows .ini 文件的程序. POSIX 用户:创建一个解析 /etc/serves 文件的程序. 其它平台用户: 写一个解析特定结构的系统配置文件的程序.
option={}
f=open(r'c:\windows\win.ini')
for line in f:  
    if line.startswith(';'):  
        continue  
    if line.startswith('['):
        iterm=[]
        name = line[1:line.rfind(']')]  
        option.setdefault(name,iterm)
        continue  
    if '=' in line:  
        option[name].append(line.strip()) 
print option  
9–8. 模块研究. 提取模块的属性资料. 提示用户输入一个模块名(或者从命令行接受输入).然后使用 dir() 和其它内建函数提取模块的属性, 显示它们的名字, 类型, 值.
m=raw_input('pls input a module name: ')
module=__import__(m)
ml=dir(module)
print ml
for i in ml:
    print 'name: ',i
    print 'type: ',type(getattr(module,i))
    print 'value: ',getattr(module,i)
    print
9–9. Python 文档字符串. 

进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会生成一个漂亮的清单. 里边列出哪些模块有文档字符串, 以及文档字符串的内容. 清单最后附上那些没有文档字符串模块的名字.附加题: 提取标准库中各模块内全部类(class)和函数的文档.

import os
pymodules={}
path=r'D:\Program Files\Python27\Lib'
pyfiles=[f for f in os.listdir(path) if f.endswith('.py')]
for f in pyfiles:
    module=f[:-3]
    pymodules.setdefault(module,'')
    pyfile=path+os.sep+f
    fobj=open(pyfile)
    doc=False
    for line in fobj:
        if line.strip().startswith('"""') and line.strip().endswith('"""'):
            pymodules[module]+=line
            fobj.close()
            break
        elif (line.strip().startswith('"""') or line.strip().startswith('r"""')) and len(line)>3:
            doc=True
            pymodules[module]+=line
            continue
        elif doc:
            if line=='"""':
                pymodules[module]+=line
                fobj.close()
                doc=False
                break
            else:
                pymodules[module]+=line
        else:
            continue
    else:
        fobj.close()
         
hasdoc=[]
nodoc=[]
for module in pymodules:
    if pymodules[module]:
        hasdoc.append(module)
    else:
        nodoc.append(module)

print 'module has no doc:'
for key in nodoc:
    print key,
print '\n'
print 'module has doc:'
for key in hasdoc:
    print 'module:',key
    print 'doc:',pymodules[key]
9-10 不会

9–11. Web 站点地址.
a) 编写一个 URL 书签管理程序. 使用基于文本的菜单, 用户可以添加, 修改或者删除书签数据项. 书签数据项中包含站点的名称, URL 地址, 以及一行简单说明(可选). 另外提供检索功能,可以根据检索关键字在站点名称和 URL 两部分查找可能的匹配. 程序退出时把数据保存到一个磁盘文件中去; 再次执行时候加载保存的数据.

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值