Python学习笔记-17.09.25

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 = 0
while True:
    if ofSize>size:
        break
    str = f.readline(1024*10)
    of.write(str)
    of.flush()
    ofSize += 1024*10
print("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,pprint
class 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 抛出异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值