我爱编程

Python 中级知识点

2018-03-29  本文已影响19人  小小小小饼

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一个目录
然后通过“模块名.函数名”的形式来调用


Screen Shot 2018-03-23 at 5.55.57 PM.png.png

2.除此外,我们还可以通过 from ... import ... 的形式导入模块
比如爬虫课程中的 from selenium import webdriver 就表示我们导入了 selenium 模块中的 webdriver 函数
要是写成 from selenium import * 则表示导入 selenium 的全部内容,但是不建议过多的这样来写

  1. 建一个ly_python文件夹,建.py文件
  2. 首先我们要拿到要操作的文件对象,这就要设计到Python()的一个内置函数open()

    Screen Shot 2018-03-23 at 6.30.20 PM.png.png

这时候打开刚才的 ly_python 文件夹你会发现,里面多了一个 test1.txt 的文件(并没有。。。)

因为我的电脑环境用不了Python2.0,索性换成Python3.0了。
读写文件:


Screen Shot 2018-03-29 at 5.33.49 PM.png.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() #开始事件循环

转自斌叔的程序媛

想学习的同学,可以加入我们哦~(T T我的组只有我一个人了,诶)
就在这里~程序媛等待你的加入

本来想把代码上传到简书的,但是不知道在哪来能上传。诶呀呀

上一篇 下一篇

猜你喜欢

热点阅读