Python 中级知识点
Python 中级
同样还是学习@斌叔的程序媛课程的笔记~
本节是对初级教程的补充,主要讲解Python中的异常处理,模块,文件I/O,GUI编程等知识
异常处理
异常就是代码在执行过程中发生的特殊事件,程序就会奔溃无法正确运行
异常处理需要用到Try/except 语句
异常的基类:BaseException
while 1:
try:
num1 = raw_input("输入被除数:")
num2 = raw_input("输入除数:")
result = int(num1)/int(num2)
except BaseException:
print "出现异常" + "\n"
else:
print ("运算结果为" + str(result))
鲁棒性:
系统和程序的稳定性,健壮性
我们在编程中药仔细考虑,看是否有情况会导致程序无法正常运行,写出更具鲁棒性的程序
模块(Module):
一个Python文件
当我们做一个程序时,可以把功能的相关代码写在一个模块里(Module),这样会使代码更清晰,更好用
1.通过 import 来导入模块
首先新建一个test.py文件,和hello.py一个目录
然后通过“模块名.函数名”的形式来调用
![](https://img.haomeiwen.com/i1623463/4c5b2078db5ad473.png)
2.除此外,我们还可以通过 from ... import ... 的形式导入模块
比如爬虫课程中的 from selenium import webdriver 就表示我们导入了 selenium 模块中的 webdriver 函数
要是写成 from selenium import * 则表示导入 selenium 的全部内容,但是不建议过多的这样来写
- 建一个ly_python文件夹,建.py文件
-
首先我们要拿到要操作的文件对象,这就要设计到Python()的一个内置函数open()
Screen Shot 2018-03-23 at 6.30.20 PM.png.png
这时候打开刚才的 ly_python 文件夹你会发现,里面多了一个 test1.txt 的文件(并没有。。。)
因为我的电脑环境用不了Python2.0,索性换成Python3.0了。
读写文件:
![](https://img.haomeiwen.com/i1623463/e531bb23062cb684.png)
rename
os.rename("test1.txt","test2.txt")
remove
os.remove("test2.txt")
写两个小Tips,如果生成不了.txt文件,可以用其他的姿势生成!学习还是要继续的!
方法一:
1)工具 TextEdit
2)按shift + command + T ,转为.txt 格式
方法二:
1)工具:Terminal
2) 跳转到指定文件夹的目录下:cd/user/文件夹
使用 vi 生成文本:sudo vi fileName.txt
保存退出::wq
------------------------------我是分割线------------------------------
写一个桌面小程序:日记本
也就是GUI(Graphical User Interface)编程
Python 中有Tkinter, wxPython 等图形界面开发的库,本课程以Tkinter
以下是重点:
btn = Button(root, text='这是一个按钮'),代表创建了一个按钮,
btn.pack() 表示把 btn 放在主窗口上,
pack 是一种布局方式
Label 可以通过 config 的方法来设置文字
saveBtn.pack(side=LEFT, anchor='sw') 表示把按钮设置在左下
其中 side 有4个值,TOP、BOTTOM、LEFT、RIGHT,默认为 TOP
anchor 是对齐方式,sw 即 southwest(西南)的,也就是左下,以此类推,一共有9个值 n、s、w、e、nw、sw、se、ne、center,默认是 center
先看写日记时,需要用到 Entry 和 Text,Entry 是一个简单的输入控件,Text 用来显示多行文本
StringVar 是一个字符串变量类型,textvariable 表示文本框中的值,写 textvariable=textVar 是为了方便我们后期对标题的一些操作
再来看看日记时,需要显示一个列表,这就要用到 ListBox
比起其他的控件多了一步,不过也是很简单的,默认的列表高度太小了,所以用 height=300 设置了一下高度
command=write 表示点击这个按钮时候,会执行 write 方法,然后我们来写一下 wirte 方法
listBox.bind('<Double-Button-1>',showDiary) 这就表示过给列表绑定了一个双击方法 showDiary,那么下一步自然是完善 showDiary 方法
遇到error:
a bytes-like object is required, not 'str'
解决方法,把str 转为byte类型
fileObj.write(content.encode(encoding = "utf-8"))
最后是退出按钮,直接 command = quit 就可以了
但是在 Mac 上有一点问题,不能通过输入法来输入中文,也没关系这不是重点,只要学会如何编写就 OK 了
附上代码,直接在Terminal 里:
python + address
就能运行了,运行效果就是简单的读写日记 ☺
消化完这些之后,要继续学Python中级课程啦~
import os
def write():
textVar.set("") #清空 entry
text.delete("0.0","end") #清空 text
label.config(text = "写日记模式")
listBox.pack_forget() #隐藏 listBox
entry.pack() #显示 entry
text.pack #显示 pack
def save():
title = textVar.get() + ".txt" # 获取标题
content = text.get("0.0", "end") # 获取内容
if title != ".txt":
fileObj = open(title, "wb") # 打开一个文件
fileObj.write(content.encode(encoding = "utf-8")) # 写入内容
fileObj.close() # 关闭打开的文件
label.config(text = "已保存")
else:
label.config(text = "请输入标题")
def read():
listBox.delete(0,END) # 清空 listBox
dir = os.getcwd() # 获取当前目录
list = os.listdir(dir) # 获取目录内所有文件
showText = "看日记模式"
if len(list) == 0: # 如果当前没有日记
showText += "(日记本是空的)" # 设置提示
label.config(text = showText)
for item in list: # 遍历
listBox.insert(0,item) # 向listBox 插入数据
listBox.bind('<Double-Button-1>',showDiary) # 绑定双击事件
entry.pack_forget() # 隐藏 entry
text.pack_forget() # 隐藏 text
listBox.pack() # 显示 listBox
def showDiary(event):
title = listBox.get(listBox.curselection()) # 获取点击的日记名
showTitle = title[:-4] # 截取至倒数第4个字符(即不显示.txt)
textVar.set(showTitle) # 设置日记标题
fileObj = open(title, "r+") # 打开对呀标题的文件
content = fileObj.read(); # 获取文件内容
text.delete("0.0", "end") # 清空 text
text.insert("end", content) # 把内容显示在 text 上
fileObj.close() # 关闭打开的文件
listBox.pack_forget() # 隐藏 listBox
entry.pack() # 显示 entry
text.pack() # 显示 text
#创建日记文件夹
def initDiary():
dir = os.getcwd() # 获取当前.py目录
list = os.listdir(dir) # 获取当前目录中的所有文件
haveDiary = False # 设置一个变量,是否存在diary文件夹,默认为 False
for item in list: # 遍历
if item == "diary": # 判断是否存在 diary 文件夹
haveDiary = True # 如果有,设置 diary 为Ture
if haveDiary == False: # 如果 haveDiary 为 False
os.mkdir("diary") # 创建 diary 文件夹
os.chdir("./diary") # 改变 .py 工作目录到 diary 内
initDiary()
root = Tk() #创建窗口
root.geometry('500x400') #窗口的frame
root.title("窗口的名字")
saveBtn = Button(root, text = "Save",command=save)
saveBtn.pack(side=LEFT,anchor='sw') #pack 是一种布局方式 ancher是一种对齐方式
quitBtn = Button(root,text = "Exit")
quitBtn.pack(side=RIGHT,anchor="se")
#command=write 表示点击这个按钮时候,会执行 write 方法,然后我们来写一下 write 方法
writeBtn = Button(root, text="写日记", command=write)
writeBtn.pack(side=BOTTOM, anchor='s')
readBtn = Button(root,text = "read",command=read)
readBtn.pack(side=BOTTOM)
label = Label(root)
label.pack()
label.config(text = "This is a demo")
textVar = StringVar()
entry = Entry(root, textvariable = textVar)
entry.pack()
listBox = Listbox(root, height = 300)
text = Text(root)
text.pack()
root.mainloop() #开始事件循环
![](https://img.haomeiwen.com/i1623463/dc2cf37f5f907903.gif)
想学习的同学,可以加入我们哦~(T T我的组只有我一个人了,诶)
就在这里~程序媛等待你的加入
本来想把代码上传到简书的,但是不知道在哪来能上传。诶呀呀