Python核心编程 第九章练习
2016-05-12 19:56
579 查看
笔者刚刚开始Python的系统学习,所以在代码上还无法达到pythonic的水准,很多写法也都是按照C++的习惯来写的,希望能有前辈进行交流指导。
wxPython的安装,linux下可以使用 sudo apt-get install python-wxtools, windows没查过,教程也很多。
现在初步了解了几个控件的使用,但是具体的排版和编辑还是差强人意,请忽略我糟糕的审美,毕竟我的美术是体育老师教的。(这年头教体育背锅上万吨)
注:该答案中没有加入判断url是否正确的功能
最后成功定位原因:在函数中,我定义了g_users这个全局变量,于是我就在各个class里面自然而然用了c++的逻辑到处使用了。但python其实此时是创建了局部的变量,所以我的传值一直不成功,才导致了这个问题。
最后得到的经验教训是:
全局变量记得加global
全局变量记得加global
全局变量记得加global
#9_13
欢迎拍砖
9_1
#!/usr/bin/python2 # coding: utf-8 if __name__ == '__main__': with open('example.txt') as f: for each_line in f: if '#' in each_line: pos = each_line.find('#') if pos > 0: print each_line[: pos] else: continue else: print each_line
9_2
#!/usr/bin/python2 # coding: utf-8 import os def FilePathCheck(F): if os.path.isfile(F): return F path = os.getcwd() curdirF = os.path.join(path, F) if os.path.isfile(curdirF): return curdirF return if __name__ == '__main__': F = raw_input('Please input the file name: ') file_path = FilePathCheck(F) if file_path: with open(file_path) as f: N = int(raw_input('Please input the line number: ')) for i in range(N): print f.readline(), else: print 'the file name is not valid!'
9_3
#!/usr/bin/python2 # coding: utf-8 import os def FilePathCheck(F): if os.path.isfile(F): return F path = os.getcwd() curdirF = os.path.join(path, F) if os.path.isfile(curdirF): return curdirF return if __name__ == '__main__': F = raw_input('Please input the file name: ') file_path = FilePathCheck(F) if file_path: with open(file_path) as f: lst_line = f.readlines() print 'the number of rows are %s' %len(lst_line) else: print 'the file name is not valid!'
9_4
#!/usr/bin/python2 # coding: utf-8 import os def FilePathCheck(F): if os.path.isfile(F): return F path = os.getcwd() curdirF = os.path.join(path, F) if os.path.isfile(curdirF): return curdirF return if __name__ == '__main__': F = raw_input('Please input the file name: ') file_path = FilePathCheck(F) if file_path: with open(file_path) as f: while True: try: raw_input('Press any key to continue...') for i in range(25): line = f.readline() if line == '': raise EOFError print line, except(EOFError, KeyboardInterrupt): break else: print 'the file name is not valid!'
9_5
#!/usr/bin/env python # encoding: utf-8 from __future__ import division #to make the python do the real division import os def Classify(value): if value > 90: return 'A' if value > 80: return 'B' if value > 70: return 'C' if value > 60: return 'D' else: return 'F' def FilePathCheck(F): if os.path.isfile(F): return F path = os.getcwd() curdirF = os.path.join(path, F) if os.path.isfile(curdirF): return curdirF return if __name__ == '__main__': F = raw_input('Please input the file name: ') file_path = FilePathCheck(F) if file_path: with open(file_path) as f: str_mark = f.read() lst_mark = str_mark.split() lst_fmark = [float(i) for i in lst_mark] lst_fmark.sort() sum_lst = sum(lst_fmark) avg_lst = sum_lst/len(lst_fmark) print "the average grade is %0.2f" %avg_lst class_lst = [Classify(i) for i in lst_fmark] print class_lst
9_6
#!/usr/bin/python2 # coding: utf-8 import os def FilePathCheck(F): if os.path.isfile(F): return F path = os.getcwd() curdirF = os.path.join(path, F) if os.path.isfile(curdirF): return curdirF return if __name__ == '__main__': F1 = raw_input('Please input the file name: ') F2 = raw_input('Please input another file name: ') file_path1 = FilePathCheck(F1) file_path2 = FilePathCheck(F2) if file_path1 and file_path2: with open(file_path1) as f1: with open(file_path2) as f2: line1 = f1.readlines() line2 = f2.readlines() for i in range(min(len(line1), len(line2))): if line1[i] == line2[i]: continue else: print 'The different line is %s' %(i+1) break else: print 'All lines are the same'
9_8
参考了birdzb的答案,第一次发现原来模块可以这么用!长见识了。他的链接是:http://blog.csdn.net/birdzb/article/details/49981091。真前辈也!#/usr/bin/python2 # coding: utf-8 if __name__ == '__main__': module = raw_input('Please input a module name: ') mod = __import__(module) dir_mod = dir(mod) print dir_mod for i in dir_mod: print 'name: %s' %i print 'type: %s' %type(getattr(mod, i)) print 'value: %s' %getattr(mod, i) print
9_9
这是birdzb的答案,他的链接是:http://blog.csdn.net/birdzb/article/details/49981091。import os pymodules = {} path = r'/usr/lib/python2.7' 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
这个题目写的规模比较大,主要原因是自己花了3个晚上的时间来学习wxPython的GUI使用(白天要在实验室弄实验室项目(与python无关),忙成狗,实在没办法写python)。总体来讲这个图形界面的模块不难入门,用起来也比Tkinter这个模块更舒服些。之所以放弃已经初步了解的Tkinter,改投wxpython,是因为wxPython使用的人多一些,无论是基础的教程还是排异解难都要方便些,为了提早出坑,所以才开始学习wxPython。想自己了解wxPython的可以访问http://wiki.wxpython.org/Getting%20Started#Getting_started_with_wxPython。wxPython的安装,linux下可以使用 sudo apt-get install python-wxtools, windows没查过,教程也很多。
现在初步了解了几个控件的使用,但是具体的排版和编辑还是差强人意,请忽略我糟糕的审美,毕竟我的美术是体育老师教的。(这年头教体育背锅上万吨)
#!/usr/bin/env python # coding: utf-8 import wx import os class BankFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(500,100)) # 创建分页 self.nb = wx.Notebook(self) # 创建储蓄 self.panel_depos = wx.Panel(self.nb) sizer_depos = wx.BoxSizer(wx.VERTICAL) self.button_dep_save = wx.Button(self.panel_depos , label="Save") self.button_dep_withdraw = wx.Button(self.panel_depos , label="Withdraw") sizer_depos.Add(self.button_dep_save, 1, wx.EXPAND) sizer_depos.Add(self.button_dep_withdraw, 1, wx.EXPAND) self.panel_depos.SetSizerAndFit(sizer_depos) self.Bind(wx.EVT_BUTTON, self.OnSave, self.button_dep_save) self.Bind(wx.EVT_BUTTON, self.OnWithdraw, self.button_dep_withdraw) # 创建金融市场 self.panel_finan = wx.Panel(self.nb) sizer_finan = wx.BoxSizer(wx.VERTICAL) self.button_fin_borrow = wx.Button(self.panel_finan, label="Borrow") self.button_fin_loan = wx.Button(self.panel_finan, label="Loan") sizer_finan.Add(self.button_fin_borrow, 1, wx.EXPAND) sizer_finan.Add(self.button_fin_loan, 1, wx.EXPAND) self.panel_finan.SetSizerAndFit(sizer_finan) # 将界面放到分页中 self.nb.AddPage(self.panel_depos, "Deposite") self.nb.AddPage(self.panel_finan, "Financial Market") def OnSave(self, event): self.Hide() # 隐藏主界面 self.text = "0" # 初始化数据 # 读取信息 file_name = "deposit.txt" f = FileExist(file_name, 'r') lst_data = f.readlines() f.close() self.sum_of_depos = float(lst_data[len(lst_data)-1].strip()) # 设置界面 self.frame_save = wx.Frame(None, title="Save") quote_msg = wx.StaticText(self.frame_save, label="Your bank acount has %s yuan left" %self.sum_of_depos) quote_save = wx.StaticText(self.frame_save, label="How much do you want to save?") text_save = wx.TextCtrl(self.frame_save, size = (100, 20)) button_save = wx.Button(self.frame_save, label="OK") save_sizer = wx.BoxSizer(wx.VERTICAL) save_sizer.Add(quote_msg, wx.EXPAND) save_sizer.Add(quote_save, wx.EXPAND) save_sizer.Add(text_save, wx.EXPAND) save_sizer.Add(button_save, wx.EXPAND) self.frame_save.SetSizerAndFit(save_sizer) self.frame_save.Show() # 设置响应 self.frame_save.Bind(wx.EVT_BUTTON, self.Save, button_save) self.frame_save.Bind(wx.EVT_TEXT, self.EvtText, text_save) def OnWithdraw(self, event): self.Hide() self.text = "0" file_name = "deposit.txt" f = FileExist(file_name, 'r') lst_data = f.readlines() f.close() self.sum_of_depos = float(lst_data[len(lst_data)-1].strip()) self.frame_withdraw = wx.Frame(None, title="Withdraw") quote_msg = wx.StaticText(self.frame_withdraw, label="Your bank acount has %s yuan left" %self.sum_of_depos) quote_withdraw = wx.StaticText(self.frame_withdraw, label="How much do you want to withdraw?") text_withdraw = wx.TextCtrl(self.frame_withdraw, size = (100, 20)) button_withdraw = wx.Button(self.frame_withdraw, label="OK") withdraw_sizer = wx.BoxSizer(wx.VERTICAL) withdraw_sizer.Add(quote_msg, wx.EXPAND) withdraw_sizer.Add(quote_withdraw, wx.EXPAND) withdraw_sizer.Add(text_withdraw, wx.EXPAND) withdraw_sizer.Add(button_withdraw, wx.EXPAND) self.frame_withdraw.SetSizerAndFit(withdraw_sizer) self.frame_withdraw.Show() # 设置响应 self.frame_withdraw.Bind(wx.EVT_BUTTON, self.Withdraw, button_withdraw) self.frame_withdraw.Bind(wx.EVT_TEXT, self.EvtText, text_withdraw) def Save(self, event): self.frame_save.Close(True) self.Show() amount = float(self.text.strip()) self.sum_of_depos += amount f = FileExist("deposit.txt", "a") f.write("%s\n" %self.sum_of_depos) f.close() def Withdraw(self, event): self.frame_withdraw.Close(True) self.Show() amount = float(self.text.strip()) if self.sum_of_depos > amount: self.sum_of_depos -= amount f = FileExist("deposit.txt", "a") f.write("%s\n" %self.sum_of_depos) f.close() else: dlg = wx.MessageDialog(self, "Warning", "You don't have enough deposite", wx.OK) dlg.ShowModal() dlg.Destroy() def EvtText(self, event): self.text = event.GetString() def FileExist(file_name, mode): curdir = os.getcwd() path = os.path.join(curdir, file_name) if (not os.path.isfile(path)): f = open(path, "w") f.write("0\n") f.close() f = open(path, mode) return f app = wx.App(False) frame = BankFrame(None, "Family Account") frame.Show() app.MainLoop()
9_11
这个部分也花了很久的时间,主要用于考察正则表达式的含义了。由于刚刚开始完全不懂正则是什么,所以看博客看起来很吃力,唯一让我豁然开朗也最接近于我们的使用的是https://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97这个文章,推荐看看。注:该答案中没有加入判断url是否正确的功能
#!/usr/bin/env python # coding: utf-8 import wx import os class URLFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title) file_name = "9_11url.html" self.FileCreate(file_name) self.nb = wx.Notebook(self) # add url panel self.add_panel = wx.Panel(self.nb) grid = wx.GridBagSizer(hgap=3, vgap=4) hSizer = wx.BoxSizer(wx.VERTICAL) # add txt blank self.lbl_name = wx.StaticText(self.add_panel, label="name") self.lbl_url = wx.StaticText(self.add_panel, label="url") self.lbl_remark= wx.StaticText(self.add_panel, label="remark") self.ctrl_name = wx.TextCtrl(self.add_panel, size = (50, 20)) self.ctrl_url = wx.TextCtrl(self.add_panel, size=(150, 20)) self.ctrl_remark = wx.TextCtrl(self.add_panel, size=(100, 20)) # grid operation grid.Add(self.lbl_name, pos=(0,0)) grid.Add(self.lbl_url, pos=(0,1)) grid.Add(self.lbl_remark, pos=(0,2)) grid.Add(self.ctrl_name, pos=(1,0)) grid.Add(self.ctrl_url, pos=(1,1)) grid.Add(self.ctrl_remark, pos=(1,2)) grid.Add((3,2), pos=(2,0)) # sizer operation self.button_add = wx.Button(self.add_panel, label="Add") hSizer.Add(grid, 4, wx.ALL, 9) hSizer.Add(self.button_add, 1, wx.CENTER) self.add_panel.SetSizerAndFit(hSizer) self.nb.AddPage(self.add_panel, "Add Url") # edit url panel self.edit_panel = wx.Panel(self.nb) with open(self.path, "r") as f: self.lst_urlmsg = f.read().split(r"\n") self.len_url = len(self.lst_urlmsg) grid_edit = wx.GridBagSizer(hgap=3, vgap=self.len_url) hSizer_edit = wx.BoxSizer(wx.VERTICAL) self.name_lst = [] self.url_lst = [] self.remark_lst = [] lst_msg=[] for i, urlmsg in enumerate(self.lst_urlmsg): if urlmsg=="": continue lst_msg = urlmsg.split(",") str_name = lst_msg[0] str_url = lst_msg[1] str_remark = lst_msg[2] ctrl_name = wx.TextCtrl(self.edit_panel, size=(50, 20)) ctrl_name.AppendText(str_name) ctrl_url = wx.TextCtrl(self.edit_panel, size=(150, 20)) ctrl_url.AppendText(str_url) ctrl_remark = wx.TextCtrl(self.edit_panel, size=(100, 20)) ctrl_remark.AppendText(str_remark) grid_edit.Add(ctrl_name, pos=(i,0)) grid_edit.Add(ctrl_url, pos=(i,1)) grid_edit.Add(ctrl_remark, pos=(i,2)) self.name_lst.append(ctrl_name) self.url_lst.append(ctrl_url) self.remark_lst.append(ctrl_remark) self.button_edit = wx.Button(self.edit_panel, label="Edit") hSizer_edit.Add(grid_edit, 0, wx.ALL) hSizer.Add(self.button_edit, 1, wx.CENTER); self.edit_panel.SetSizerAndFit(hSizer_edit) self.nb.AddPage(self.edit_panel, "Edit Url") self.Bind(wx.EVT_BUTTON, self.Add, self.button_add) self.Bind(wx.EVT_BUTTON, self.Edit, self.button_edit) def Add(self, event): str_name = self.ctrl_name.GetValue().strip() str_url = self.ctrl_url.GetValue().strip() str_remark = self.ctrl_remark.GetValue().strip() with open(self.path, "a") as f: if str_name!="" and str_url!="": f.write(r"%s,%s,%s\n" %(str_name, str_url, str_remark)) def Edit(self, event): num = len(self.name_lst) with open(self.path, "w") as f: for i in range(num): str_name = self.name_lst[i].GetValue().strip() str_url = self.name_lst[i].GetValue().strip() str_remark = self.remark_lst[i].GetValue().strip() f.write(r"%s,%s,%s\n" %(str_name, str_url, str_remark)) def FileCreate(self, file_name): curdir = os.getcwd() self.path = os.path.join(curdir, file_name) if (not os.path.isfile(self.path)): f = open(self.path, "w") f.close() app = wx.App(False) frame = URLFrame(None, "URL Management System") frame.Show() app.MainLoop()
9_12
这段代码写起来倒是不难,可是为了定位错误原因,花了我整整一个晚上的时间。利用cPickle每次数据都没有保存起来,无论怎么读,都是空,真是折腾死了。最后成功定位原因:在函数中,我定义了g_users这个全局变量,于是我就在各个class里面自然而然用了c++的逻辑到处使用了。但python其实此时是创建了局部的变量,所以我的传值一直不成功,才导致了这个问题。
最后得到的经验教训是:
全局变量记得加global
全局变量记得加global
全局变量记得加global
#!/usr/bin/python # coding: utf-8 import wx import os import cPickle import string availChar = string.lowercase + string.uppercase g_path = '' g_users = {} class AccountFrame(wx.Frame): def __init__(self, parent, title): global g_path global g_users wx.Frame.__init__(self, parent, title=title, size=(200, 200)) file_name = "9_12_Account.txt" #self.FileCreate(file_name) curdir = os.getcwd() self.path = os.path.join(curdir, file_name) g_path = self.path f = open(self.path, 'r') self.users = cPickle.load(f) f.close() g_users = self.users self.btn_log = wx.Button(self, label="user loggin") self.btn_show = wx.Button(self, label="Show all users") self.btn_del = wx.Button(self, label="Delete user") self.btn_quit = wx.Button(self, label="Quit") hSizer = wx.BoxSizer(wx.VERTICAL) hSizer.Add(self.btn_log, 1, wx.CENTER) hSizer.Add(self.btn_show, 1, wx.CENTER) hSizer.Add(self.btn_del, 1, wx.CENTER) hSizer.Add(self.btn_quit, 1, wx.CENTER) self.SetSizerAndFit(hSizer) self.Bind(wx.EVT_BUTTON, self.Loggin, self.btn_log) #self.Bind(wx.EVT_BUTTON, self.Show, self.btn_show) #self.Bind(wx.EVT_BUTTON, self.Delete, self.btn_del) self.Bind(wx.EVT_BUTTON, self.Quit, self.btn_quit) self.Bind(wx.EVT_CLOSE, self.Quit, self) def Loggin(self, event): self.Hide() LogginFrame(self) def Quit(self, event): global g_users f = open(self.path, 'w') cPickle.dump(g_users, f, 0) f.close() self.Destroy() def FileCreate(self, file_name): curdir = os.getcwd() self.path = os.path.join(curdir, file_name) g_path = self.path if (not os.path.isfile(self.path)): f = open(self.path, "wb") f.close() class LogginFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent=None, title="Loggin") global g_users self.parent = parent self.txt_name = wx.StaticText(self, label="Name:", size=(80,30)) self.txt_passwd = wx.StaticText(self, label="Password:",size=(80,30)) self.ctrl_name = wx.TextCtrl(self, size=(150,30)) self.ctrl_passwd = wx.TextCtrl(self, size=(150,30)) self.btn_ok = wx.Button(self, label="Ok") grid_log = wx.GridBagSizer(hgap=2, vgap=4) grid_log.Add(self.txt_name, pos=(0,0)) grid_log.Add(self.ctrl_name, pos=(0,1)) grid_log.Add(self.txt_passwd, pos=(1,0)) grid_log.Add(self.ctrl_passwd, pos=(1,1)) hSizer = wx.BoxSizer(wx.VERTICAL) hSizer.Add(grid_log, 4, wx.ALL, 2) hSizer.Add(self.btn_ok, 1, wx.EXPAND) self.SetSizerAndFit(hSizer) self.Bind(wx.EVT_BUTTON, self.Ok, self.btn_ok) self.Bind(wx.EVT_CLOSE, self.Quit, self) self.Show() def Quit(self, event): self.parent.Show() self.Destroy() def Ok(self, event): global g_users name = self.ctrl_name.GetValue() password = self.ctrl_passwd.GetValue() bNameOk = True for i in name: if i not in availChar: bNameOk = False break if not bNameOk: dlg = wx.MessageDialog(self, "Not a available name", "warning", wx.OK) elif name in g_users.keys(): if password == g_users[name]: dlg = wx.MessageDialog(self, "welcome back", "info", wx.OK) else: dlg = wx.MessageDialog(self, "password not correct", "warning", wx.OK) else: g_users[name] = password dlg = wx.MessageDialog(self, name, password, wx.OK) dlg.ShowModal() dlg.Destroy() self.parent.Show() self.Destroy() if __name__ == "__main__": app = wx.App(False) frame = AccountFrame(None, "Loggin System") frame.Show() app.MainLoop()
#9_13
#!/usr/bin/python # coding: utf-8 import sys if __name__ == "__main__": argvs = sys.argv print "all the argvs are: ", for i in argvs: print i,
9_14
#!/usr/bin/python # coding: utf-8 from __future__ import division import sys if __name__ == "__main__": argv = sys.argv math = [] for i in range(1, len(argv)): math.append(argv[i]) str_math = ''.join(math) b_math = True for i in "+-*/^": if i in str_math: break else: b_math = False if b_math: ab = str_math.split(i) a = float(ab[0]) b = float(ab[1]) if i is "+": print a+b elif i is "-": print a-b elif i is "*": print a*b elif i is "/": print a/b else: print a**b
9_15
#!/usr/bin/python # coding: utf-8 import sys import os if __name__ == "__main__": argv = sys.argv if len(argv) != 3: print "not right parameters" os._exit(1) file1 = argv[1] file2 = argv[2] curdir = os.getcwd() path1 = os.path.join(curdir, file1) path2 = os.path.join(curdir, file2) with open(path1, 'r') as f1: with open(path2, 'w') as f2: data = f1.read() f2.write(data) print "copy finished"
9_16
发现一个大神,代码写的极其漂亮,推荐大家去看看。下面的答案来自他的主页。http://www.xmanblog.net/2015/04/29/%E3%80%8Apython%E6%A0%B8%E5%BF%83%E7%BC%96%E7%A8%8B%E3%80%8B%E7%AC%AC%E4%B9%9D%E7%AB%A0%E7%BB%83%E4%B9%A0%E8%A7%A3%E6%9E%90/。#!/usr/bin/python # coding: utf-8 def check_text(): """文档处理函数,对长度超过80的进行截断""" f = open("1.txt", "r") lines_1 = f.readlines() f.close() lines_2 = [] #将新生成的文档先储存在lines_2中 for line in lines_1: if len(line)>80: if line[80] == " ": #如果81个位置是空格,就不需要考虑单词边界问题 lines_2.append(line[:80]+"n") lines_2.append(line[81:]) else: local = line[:80].rfind(" ") #否则查找最靠近第80个位置的空格截断,保持单词的完整性 lines_2.append(line[:local]+"n") lines_2.append(line[local+1:]) else: lines_2.append(line) f = open("1.txt", "w") f.writelines(lines_2) f.close() if __name__ == "__main__": """主函数""" while True: #循环检测每行的长度,直至长度全部小鱼或等于80 f = open("1.txt", "r") lines = f.readlines() f.close() for line in lines: if len(line)>80: check_text() break else: break print "Done!"
9_17
#!/usr/bin/python # coding: utf-8 import os def Create(): """Create a file""" file_name = raw_input("Please input a file name: ") current_dir = os.getcwd() path = os.path.join(current_dir, file_name) f = open(path, "w") file_content = [] print "Please input file content, press Ctrl + d to stop: " while True: try: f.write(raw_input()+"\n") except (EOFError, KeyboardInterrupt, IndexError): f.close() break def Show(): """Show the content on the screen""" file_name = raw_input("Please input a file name: ") current_dir = os.getcwd() path = os.path.join(current_dir, file_name) f = open(path, "r") for line in f: print line, f.close() def Edit(): """Edit a file content""" file_name = raw_input("Please input a file name: ") current_dir = os.getcwd() path = os.path.join(current_dir, file_name) with open(path, "r") as f: lines = f.readlines() row_number = int(raw_input("Please input the row number: ")) row_content = raw_input("Please edit content: ") + "\n" lines[row_number-1] = row_content with open(path, "w") as f: for line in lines: f.write(line) def Menu(): CMD = {"c": Create, "s": Show, "e": Edit} msg_help = """Please choose: (C)reate (S)how (E)dit (Q)uit""" print msg_help msg = "Your choice: " while True: try: choice = raw_input(msg).strip().lower()[0] except (EOFError, KeyboardInterrupt, IndexError): choice = 'q' if choice not in "cseq": msg = "Wrong choice, input again: " continue else: break if choice is not "q": CMD[choice]() if __name__ == "__main__": Menu()
9_18
#!/usr/bin/python # coding:utf-8 import os def count(path, ord_of_str): sum_of_str = 0 str_to_find = chr(ord_of_str) with open(path) as f: for line in f: sum_of_str += line.count(str_to_find) return sum_of_str if __name__ == "__main__": cur_dir = os.getcwd() file_name = raw_input("Please input a file name: ") path = os.path.join(cur_dir, file_name) ord_of_str = int(raw_input("Please input a number: ")) sum_of_str = count(path, ord_of_str) print "the string used %s times" %sum_of_str
9_19
#!/usr/bin/python # coding:utf-8 import os def count(path, ord_of_str): sum_of_str = 0 str_to_find = chr(ord_of_str) with open(path) as f: for line in f: sum_of_str += line.count(str_to_find) return sum_of_str if __name__ == "__main__": cur_dir = os.getcwd() file_name = raw_input("Please input a file name: ") path = os.path.join(cur_dir, file_name) ord_of_str = int(raw_input("Please input a number: ")) sum_of_str = count(path, ord_of_str) print "the string used %s times" %sum_of_str
9_20
这个程序很简单,我就不多做介绍了,随便一搜就能找到gzip的资料。#!/usr/bin/python # coding:utf-8 import gzip import os def gz(file_name): """gzip a file at the current work directory""" curdir = os.getcwd() path = os.path.join(curdir, file_name) g_file_name = file_name + ".gz" g_file = gzip.GzipFile(g_file_name, "wb") print g_file_name g_file.write(open(path).read()) g_file.close() def ungz(g_file_name): """ungzip a file""" g_file_name_tuple = os.path.splitext(g_file_name) file_name = g_file_name_tuple[0] g_file = gzip.GzipFile(g_file_name) open(file_name, "w+").write(g_file.read()) g_file.close() if __name__ == "__main__": CMDS = {"g": gz, "u" : ungz} msg_help = """(G)zip (U)ngzip (Q)uit Please choose: """ while True: try: choice = raw_input(msg_help).strip().lower()[0] except (EOFError, KeyboardInterrupt, IndexError): choice = 'q' if choice not in "guq": msg_help = "Wrong choice, please input again: " else: break if choice != 'q': file_name = raw_input("Input a file name: ") CMDS[choice](file_name)
9_21
#!/usr/bin/python # coding: utf-8 import zipfile import os def CreateZipFile(z_file_name): """Create a zip file z_file_name: zipfile's name""" curdir = os.getcwd() path = os.path.join(curdir, z_file_name) file_name = raw_input("Input a file name: ") file_path = os.path.join(curdir,file_name) z_file = zipfile.ZipFile(path, "w") z_file.write(file_path, file_name, zipfile.ZIP_DEFLATED) z_file.close() def ExtraZipFile(z_file_name): """Extract a zip file""" curdir = os.getcwd() path = os.path.join(curdir, z_file_name) z_file = zipfile.ZipFile(path) for file in z_file.namelist(): z_file.extract(file, curdir) z_file.close() if __name__ == "__main__": msg_help = """(C)reate a zip file (E)xtract a zip file (Q)uit Please choose: """ CMDs = {"c" : CreateZipFile, "e" : ExtraZipFile} while True: try: choice = raw_input(msg_help).strip().lower()[0] except (EOFError, KeyboardInterrupt, IndexError): choice = "q" if choice not in "ceq": msg_help = "Wrong input, try again: " continue else: break if choice is not "q": file_name = raw_input("Input a zip file name: ") CMDs[choice](file_name)
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法