您的位置:首页 > 编程语言 > Python开发

python核心编程 9章练习题

2013-10-08 23:47 459 查看
下面是自己做的python核心编程第9章的部分练习题答案,windows python2.7下编译通过,后续继续补充其它未完成题目,有不正确的地方欢迎指正。

9-9附加题:

#-*-coding:utf-8-*-

import os
import sys
import glob
import re
import traceback

def print_doc():
# 获取python标准库下的所有py文件
py_exe_dir = sys.prefix
py_path = os.path.join(py_exe_dir, 'Lib', '*.py')
py_list = glob.glob(py_path)

cls_pattern = r"""\s*(class\s+\w+\([\w,\s]+\):)\s+['"]{3}([\s\S]*?)['"]{3}"""
func_pattern = r"""\s*(def\s+\w+\([\w,\s]+\):)\s+['"]{3}([\s\S]*?)['"]{3}"""

#打开记录类和函数文档的文件
DOC_FILE_PATH = './module_doc.txt'
doc_file = open(DOC_FILE_PATH, 'wb')

for py_file in py_list:
try:
#打开并读取py文件的内容
f = open(py_file, 'rb')
file_content = f.read()
f.close()

begin_txt = "%s %s module's class and function document%s\n" \
%('='*5, py_file,'='*5)
doc_file.write(begin_txt)
#获取并打印模块中类的文档
split_cls_txt = '-'*20 + 'class doc' + '-'*20 + '\n'
doc_file.write(split_cls_txt)
cls_result = re.findall(cls_pattern, file_content)
for cls_doc in cls_result:
#记录类名称
doc_file.write(cls_doc[0] + '\n')
#记录类文档
doc_file.write(cls_doc[1].decode('utf-8').strip() + '\n')

#获取并打印模块中函数的文档
split_func_txt = '-'*20 + 'function doc' + '-'*20
doc_file.write(split_func_txt + '\n')
func_result = re.findall(func_pattern, file_content)
for func_doc in func_result:
#记录函数名称
doc_file.write(func_doc[0] + '\n')
#记录函数文档
doc_file.write(func_doc[1].decode('utf-8').strip())
doc_file.flush()
except:
print traceback.format_exc()

doc_file.close()

if __name__ == '__main__':
print_doc()


9-9:

#coding:utf-8

import os
import sys
import glob
import re
import traceback

def print_doc():
# 获取python标准库下的.py文件
py_exe_dir = sys.prefix
py_path = os.path.join(py_exe_dir, 'Lib', '*.py')
py_list = glob.glob(py_path)

flag = r'"""'   #文档字符串标记
module_doc = {} #用于保存存在文档字符串的module
module_empty_doc = {} #用于保存文档字符串为空的module
try:
for py_file in py_list:
f = open(py_file, 'rb')
file_content = f.read()
beg_pos = file_content.find(flag)
if beg_pos != -1:
end_pos = file_content.find(flag, beg_pos + 3)
doc = file_content[beg_pos+3:end_pos]
module_doc[os.path.basename(py_file)] = doc
else:
doc = ''
module_empty_doc[os.path.basename(py_file)] = doc
except:
print traceback.print_exc()

for key in module_doc:
print "module %s doc is: " %key
print module_doc[key]

print '-'*20 + 'no doc module ' + '-'*20
for key in module_empty_doc:
print key

if __name__ == '__main__':
print_doc()


9-8:

#coding:utf-8

import time

def parse_module():
while 1:
module_name_str = raw_input("Please input module name,if exit input 'q':")
try:
# 输入字母q退出
if module_name_str == 'q':
break

#获取module的所有属性
module_name = __import__(module_name_str)
attr_list = dir(module_name)
for attr in attr_list:
print 'Name:%s, Type:%s, Value:%s' %(attr, type(getattr(module_name, attr)), getattr(module_name, attr))
except NameError, e:
print e
except ImportError, e:
print e
except:
pass

if __name__ == '__main__':
parse_module()


9-7:

#coding:utf-8

import Queue

def ini_parser(file_name):
with open(file_name, 'rb') as f:
lines = (line.strip() for line in f)
q = Queue.Queue()
sec_dict = {}
for line in lines:
# 空行和注释行不处理,其它的行放入队列
if  line == '' or line[0] == ';':
pass
else:
q.put(line)

while not q.empty():
line = q.get()
if line[0] == '[' and line[-1] == ']':
# 获取ini文件中的section
sec_name = line[1:-1]
sec_dict[sec_name] = {}
else:
# 获取section下的key和value
item = line.split('=', 2)
if len(item) == 2:
key, value = item[0], item[1]
sec_dict[sec_name][key.strip()] = value.strip()

return sec_dict

if __name__ == '__main__':
sec_dict = ini_parser('t4.ini')
print sec_dict


9-6:

#coding:utf-8

import traceback

def cmp_file(file1, file2):
try:
f1 = open(file1, 'rb')
f2 = open(file2, 'rb')
line_num = 0

# 首先一行行读取文件1,然后再一行行读取文件2进行比较
for line1 in f1:
line_num += 1
line2 = f2.readline()
len1 = len(line1)
len2 = len(line2)

if len1 == 0 and len2 == 0:
break
elif len1 == 0 or len2 == 0: #其中一行为空,则第一个字符即不相同
print line_num, 0
elif len1 < len2:
for i in range(len1):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1 #打印行号,列号,列号从0开始,所以加1
i += 1  #移动到下一个字符
print line_num, i+1         #打印行号,列号,列号从0开始,所以加1
elif len1 == len2:
for i in range(len1):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1'
elif len1 > len2:
for i in range(len2):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1
return None
i += 1
print line_num, i+1
except IOError:
traceback.print_exc()

if __name__ == '__main__':
cmp_file('t2.txt', 't3.txt')


9-4:

#coding:utf-8

import traceback

def cmp_file(file1, file2):
try:
f1 = open(file1, 'rb')
f2 = open(file2, 'rb')
line_num = 0

# 首先一行行读取文件1,然后再一行行读取文件2进行比较
for line1 in f1:
line_num += 1
line2 = f2.readline()
len1 = len(line1)
len2 = len(line2)

if len1 == 0 and len2 == 0:
break
elif len1 == 0 or len2 == 0: #其中一行为空,则第一个字符即不相同
print line_num, 0
elif len1 < len2:
for i in range(len1):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1 #打印行号,列号,列号从0开始,所以加1
i += 1  #移动到下一个字符
print line_num, i+1         #打印行号,列号,列号从0开始,所以加1
elif len1 == len2:
for i in range(len1):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1'
elif len1 > len2:
for i in range(len2):
if line1[i] == line2[i]:
continue
else:
print line_num, i+1
return None
i += 1
print line_num, i+1
except IOError:
traceback.print_exc()

if __name__ == '__main__':
cmp_file('t2.txt', 't3.txt')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: