文档章节

chapter 9 exercise

happyliferao
 happyliferao
发布于 2015/10/09 09:49
字数 2570
阅读 72
收藏 0
9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做
Python , Perl, Tcl, 等大多脚本文件的注释符号.
附加题: 处理不是第一个字符开头的注释.

import os
filename=raw_input('please input you file name:')
fobj=open(filename,'r')
data=[line.strip() for line in fobj.readlines()]
fobj.close()
print data
for string in data:
    if string[0]!='#':
       print string

9–2. 文件访问. 提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行.
code:

import os

File=raw_input('please input filename:')
Num=int(raw_input('please input the number:'))

fobj=open(File,'r')
Line=[line.strip() for line in fobj.readlines()]
for i in range(Num):
    print Line[i]


fobj.close()


9–3. 文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数.

import os

File=raw_input('please input filename:')
fobj=open(File)
i=0
for line in fobj:
    i=i+1

print i

fobj.close()


another code:

import os

File=raw_input('please input filename:')
fobj=open(File)

length=len([line for line in fobj])
print length
fobj.close()

question:length=len([line for line infobj])为什么只能用列表解析却不能用生成器表达式(length=len(line for line infobj))解析呢?



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

tips:
让Python脚本暂停执行的几种方法求解,
2. raw_input( )
通过等待输入来让程序暂停
3. os.system("pause")
通过执行操作系统的命令来让程序暂停,该函数是通过实现标准C函数system( )来实现的。
code:

import os
def showTextPage(filename):
    f=open(filename)
    n=0
    for eachline in f:
       print eachline
       n=n+1
       if n%==0:
          
          os.system('pause')

          continue
    f.close()

filename=raw_input('please input filename:')
showTextPage(filename)



9–5. kaoshi成绩. 改进你的kaoshi成绩问题(练习 5 -3 和 6-4), 要求能从多个文件中读入kaoshi成绩. 文件的数据格式由你自己决定.

难点:多个文件中读取。
code:
5-3 标准类型运算符. 写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分
成绩(A-F)。
A: 90–100
B: 80–89
C: 70–79
D: 60–69
F: <60

术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代
码应该可以计算出一个平均分




9–6. 文件比较. 写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和
列号.

filename1=raw_input('please input file1;')
filename2=raw_input('please input file2:')

fobj1=open(filename1)
fobj2=open(filename2)

def compareline(line1,line2):
    t=len(lene1) iflen(line1)
    for j in range(t):
       if line1[j]!=line2[j]:
           print'j islist%d' %(j+1)
          break


def textCompare(fobj1,fobj2):
   line1=fobj1.readlines()
   line2=fobj2.readlines()
    for i inrange(len(line1)):
       if line1[i]!=line2[i]:
           print 'iis row%d'%(i+1)
          compareline(line1[i],line2[i])
          break
    else:
       print 'exactly the same.'


textCompare(fobj1,fobj2)
fobj1.close()
fobj2.close()


9–7. 解析文件. Win32 用户: 创建一个用来解析 Windows .ini 文件的程序. POSIX用户:
创建一个解析 /etc/serves 文件的程序. 其它平台用户: 写一个解析特定结构的系统配置文件的
程序.

code:
def parseIni(filename):
    f=open(filename)
    dict1={}
    for eachLine in f:
       index=eachLine.find('=')
       if index!=-1:
          key=eachLine[:index].strip()
          value=eachLine[index+1:].strip()
          dict1[key]=value
    for key in dict1:
       print key,'=',dict1[key]

    f.close()
parseIni('system.ini')


9–8. 模块研究. 提取模块的属性资料. 提示用户输入一个模块名(或者从命令行接受输入).
然后使用 dir() 和其它内建函数提取模块的属性, 显示它们的名字, 类型, 值.
code: 暂时还没搞懂



import os

module=raw_input('please input the module name:')

def getattribute(module):
    a=help(module)
   f=open('module.txt','w')
   f.write('%s%s'%(a,os.linesep))
    f.close()

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


import os
import sys
path=r'C:\Python27\Lib\aifc.py'
fileobj1=open('docstring.txt','a+')
fobj=open(path)
strTemp=''
hasDoc=False

for eachline in fobj:
    if (not hasDoc) andeachline.startswith('"""'):
       hasDoc = True
    elif hasDoc andeachline.startswith('"""'):
       hasDoc = False
       strTemp += eachline
       break
    if hasDoc:
       strTemp += eachline
    else:
       break

if strTemp != "":
        fileobj1.write("filename:"+os.linesep)
        fileobj1.write("__doc__ is:" +os.linesep)
        fileobj1.write(strTemp +os.linesep)


strTemp = ""

fobj.close()
fileobj1.close()


9–13. 命令行参数
a) 什么是命令行参数, 它们有什么用?
b) 写一个程序, 打印出所有的命令行参数.


命令行参数是指通过命令行传入的参数。sys.argv,当你在文本环境下编写代码需要在cmd下运行时必须通过命令行参数向程序传输参数。
命令行参数是调用某个程序时除程
序名以外的其它参数

import sys

for i in range(1,len(sys.argv)):
    printi,sys.argv[i]

通过cmd执行该程序并输入参数。


9–14. 记录结果. 修改你的计算器程序(练习 5-6 )使之接受命令行参数. 例如:
$ calc.py 1 + 2
只输出计算结果. 另外, 把每个表达式和它的结果写入到一个磁盘文件中. 当使用下面的命令
时:
$ calc.py print
Edit By Vheavens
Edit By Vheavens
会把记录的内容显示到屏幕上, 然后重置文件. 这里是样例展示:

import os
import sys

def count(express):
    for a in express:
       i=express.index(a)
       if a=='+':
           returnint(express[:i])+ int(express[i+1:])
       elif  a=='-':
           returnint(express[:i])- int(express[i+1:])
       elif a=='*':
           returnint(express[:i])* int(express[i+1:])
       elif a=='/'and int(express[i+1:])!=0:
           returnint(express[:i])/ int(express[i+1:])
       elif a=='%'and int(express[i+1:])!=0:
           returnint(express[:i])% int(express[i+1:])
       elif a=='**'and int(express[i+1:])!=0:
           returnint(express[:i])** int(express[i+1:])

    else:
       return 'invalue express,please inputagain'



if __name__=='__main__':


   express=sys.argv[1]
    if express=='print':
       with open('result.txt') as fobj:
           printfobj.read()
       os.remove('result.txt')
    else:
       with open('result.txt','a+') as fobj:
          fobj.write(sys.argv[1])
          fobj.write('='+str(count(sys.argv[1])))
          fobj.write('\n')

    print 'the resultis:%d'%(count(sys.argv[1]))



9–15. 复制文件. 提示输入两个文件名(或者使用命令行参数). 把第一个文件的内容复制
到第二个文件中去.
code:
import sys
import os
file1=raw_input('please input filename:')
file2=raw_input('please input filename2:')

fobj1=open(file1)
fobj2=open(file2,'w')
for eachline in fobj1:
   fobj2.write(eachline+os.linesep)

fobj1.close()
fobj2.close()

code2:用sys.argv传递参数

import sys
import os
#file1=raw_input('please input filename:')
#file2=raw_input('please input filename2:')

fobj1=open(sys.argv[1])
fobj2=open(sys.argv[2],'w')
for eachline in fobj1:
   fobj2.write(eachline+os.linesep)

fobj1.close()
fobj2.close()



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

code:

import sys

import os

with open('newfile.txt') as fobj:
    withopen('temp.txt','w')as fobj2:
       for eachline in fobj:
           iflen(eachline)>80:
             eachline1=list(eachline)
              num=len(eachline1)/80
              for i in range(num):
                 fobj2.write(''.join(eachline[:79]))
                 fobj2.write(os.linesep)
                 eachline=eachline[79:]
             fobj2.write(''.join(eachline))

          else:
             fobj2.write(eachline+os.linesep)
    fobj2.close()
    fobj.close()

这个代码有个问题就是有的时候那个一行末尾的单词会被截断,再kaolv一个。kaolv到这个我突然想到在第八章里面有个表达式解析好像有这个方法,

去回顾一下去。

附加题:
需要计算出所有非空白字符的数目。
And the Lord spake, saying, "First shalt thou take
out the Holy Pin. Then shalt thou count to three,
Edit By Vheavens
Edit By Vheavens
no more, no less. Three shall be the number thou shalt
count, and the number of the counting shall be three.
Four shalt thou not count, nei- ther count thou two,
excepting that thou then proceed to three. Five is
right out. Once the number three, being the third
number, be reached, then lobbest thou thy Holy Hand
Grenade of Antioch towards thy foe, who, being
naughty in My sight, shall snuff it."

code:
f = open('hhga.txt', 'r')
sum=len([word for line in f for word in line.split()])


9–17. 文本处理. 创建一个原始的文本文件编辑器. 你的程序应该是菜单驱动的, 有如下
这些选项:
1) 创建文件(提示输入文件名和任意行的文本输入),
2) 显示文件(把文件的内容显示到屏幕),
3) 编辑文件(提示输入要修改的行, 然后让用户进行修改),
4) 保存文件, 以及
5) 退出.

code:


9–18. 搜索文件. 提示输入一个字节值(0 - 255)和一个文件名. 显示该字符在文件中出现
的次数.

code:
chr=raw_input('please input character:')
filename=raw_input('please input filename:')

fobj=open(filename)
j=0
for eachline in fobj:
   list1=list(eachline)

    for i inrange(len(list1)):
       if chr==list1[i]:
          j=j+1

fobj.close()
print j


或者使用字符串计数函数;string.count(chr)
chr=raw_input('please input character:')
filename=raw_input('please input filename:')

fobj=open(filename)
j=0
for eachline in fobj:
   j=j+eachline.count(chr)

fobj.close()
print j


9–19. 创建文件. 创建前一个问题的辅助程序. 创建一个随机字节的二进制数据文件, 但
某一特定字节会在文件中出现指定的次数. 该程序接受三个参数:
1) 一个字节值( 0 - 255 ),
2) 该字符在数据文件中出现的次数, 以及
3) 数据文件的总字节长度.

你的工作就是生成这个文件, 把给定的字节随机散布在文件里, 并且要求保证给定字符在文件
中只出现指定的次数, 文件应精确地达到要求的长度.

code:
import os
import random

def fun(chr,countNum,length):
    num=[]
    firstlength=length
    whilefirstlength-countNum:

       char=random.choice(xrange(255))
       num.append(char)
       firstlength=firstlength-1

    for i inrange(countNum):
       num.append(chr)
   random.shuffle(num)
    return num

if __name__=='__main__':


    while True:
       chr=int(raw_input('please input the charter youwant to(0 to quit) :'))
       countNum=int(raw_input('please input thetimes:'))
       length=int(raw_input('please input the totalltimes'))
       if chr==0:
          break
       elif length
           print'wrong ,please input again'
          break
       else:
          num=fun(chr,countNum,length)
           for i innum:
              print '{0:b}'.format(i)


9–20. 压缩文件. 写一小段代码, 压缩/解压缩 gzip 或 bzip 格式的文件. 可以使用命令
行下的 gzip 或 bzip2 以及 GUI 程序 PowerArchiver , StuffIt , 或 WinZip来确认你的 Python
支持这两个库.
code:
import zipfile

with zipfile.ZipFile('hello.zip','w')as myzip:
   myzip.write('text.txt')


//////////////////////////////////////
import zipfile

f=zipfile.ZipFile('text.zip','w')
f.write('text.txt')
f.write('temp.txt')
f.close()
///////////////////////////////

9–21. ZIP 归档文件. 创建一个程序, 可以往 ZIP 归档文件加入文件, 或从中提取文件,
有可能的话, 加入创建ZIP 归档文件的功能.

© 著作权归作者所有

共有 人打赏支持
happyliferao
粉丝 6
博文 85
码字总数 60147
作品 0
顺义
QA/测试工程师
私信 提问
chapter 9 summary

open() 的基本语法是: fileobject = open(filename, access_mode='r',buffering=-1) access_mode,'r','w','a','U'分别代表读取, 写入和追加,通用换行符支持 使用 'r' 或 'U' 模式打开的文件......

happyliferao
2015/10/12
9
0
chapter 8 exercise

8–4. 素数.我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个 素数. 请把相关代码转换为一个返回值为布尔值的函数,函数名为isprime() . 如果输入的是一个 素数, 那么...

happyliferao
2015/10/09
50
0
chapter 11 exercise

11-3 函数。在这个练习中,我们将实现max()和min()内建函数。 (a) 写分别带两个元素返回一个较大和较小元素,简单的max2()核min2()函数。他们应该可以 用任意的python 对象运作。举例来说,m...

happyliferao
2015/10/09
21
0
python chapter 5 exercise

.讲讲Python 普通整型和长整型的区别? 普通整型范围-231--231-1 长整型是普通整型的超集。 python2.3版本之后普通整型和长整型已经统一了,普通用户已经看不到长整型的存在了。 2.5-2 运算符...

happyliferao
2015/10/12
9
0
PYTHON chapter 4 exercise

4–1. Python 对象。与所有Python 对象有关的三个属性是什么?请简单的描述一下。 身份:也就是相当于内存地址,通过Id()获得,这个属性不可变 类型:对象的类型决定了对象可以保存什么样的...

happyliferao
2015/10/12
41
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
今天
7
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
今天
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
今天
4
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
今天
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部