Python学习笔记-17.09.25

来源:互联网 发布:天猫dw美工教程 百度云 编辑:程序博客网 时间:2024/05/17 23:19

Python学习笔记-17.09.25

输入一串字符,计算并输出里面每个字符的出现次数

mystr = input("请输入任意内容")tongji = {}for s in mystr:    n = tongji.get(s)    if n is None:        tongji.__setitem__(s,1)    else:        tongji.__setitem__(s,n+1)#字符串格式化for key in tongji:    print("{0} 出现了 {1}次".format(key,tongji.get(key)))print("------------------------")dict= sorted(tongji.items(), key=lambda d:-d[1])for d in dict:    print("{0} 出现了 {1}次".format(d[0],d[1]))print("------------------------")dict= sorted(tongji.items(), key=lambda d:(-d[1],d[0].encode('gbk')))for d in dict:    print("{0} 出现了 {1}次".format(d[0],d[1]))

这段代码是通过字典的特性完成,因为key不可重复,所以当字典中没有找到这个字符时,即次数为零,添加一个新的键值对,并把次数设置为1。当字典中已存在这个key时,把它的次数加一。

而后面的排序是通过lambda,因为用了serted函数进行排序,所以返回的是一个列表,里面储存的是元组,key=lambda d:(-d[1],d[0].encode(‘gbk’)))是通过元组的第二个元素,也就是原来字典中的value进行排序,我们的value储存的是字符出现次数,也就是根据次数进行排序。
而d[0].encode(‘gbk’)是根据key进行排序,我需求的是根据拼音进行排序,而字符编码gbk可以做到到,所以用.encode(‘gbk’)来完成。

IO

f = open("G:/file/a/test.txt")of = open("G:/file/b/test.txt","w")for line in f:    of.write(line)print("ok")f = open("G:/file/a/pic.bmp",'rb')of = open("G:/file/b/pic.bmp",'wb')# of.write(f.read())f.seek(0,2)size = f.tell()print(round(size/1024/1024,2),"MB")f.seek(0,0)ofSize = 0while True:    if ofSize>size:        break    str = f.readline(1024*10)    of.write(str)    of.flush()    ofSize += 1024*10print("ok")

open() 将会返回一个 file 对象,我们通过操作这个对象来进行文件操作
语法:open(filename, mode)
mode模式
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

我们可以直接通过read()后write()来直接进行读写,因为read在不指定读写大小时是直接读取整个文件,但是这样效率不高,所以我们一般设置一个读写缓存区,在上面代码中,seek()方法可以跳到文件指定位置,我们可以通过这个方法来获取文件的大小,来判断我们的缓存区域需要循环多少次才能完成这次读写。

import pickle,pprintclass Person:    name = None    age = None    def __init__(self,name,age):        self.name = name        self.age = age    def __str__(self):        return ("name:{0},age:{1}".format(self.name,self.age))p = Person('zs',18)f = pickle.dump(p,open("G:/file/a/person.data",'wb'))pprint(pickle.load(open("G:/file/a/person.data",'rb')))

通过pickle序列化模块,我们可以把对象保存在本地并读写。

异常

class Aex(Exception):    def __str__(self):        return "Aex"class Bex(Exception):    def __str__(self):        return "Bex"class Cex(Exception):    def __str__(self):        return "Cex"n = int(input("请输入整数"))try:    if n == 1:        raise Aex()    if n == 2:        raise Bex()    if n == 3:        raise Cex()    print("ok")except(Aex,Bex,Cex) as e:    print(e)

我们通过继承Exception来自定异常
而Python中通过try except来进行异常处理。raise 抛出异常

原创粉丝点击