python基础知识(四)

关于编码的问题:

in python3中:对于英文、数字:utf8  1个bytes(字节)对于一个字符

        对于中文:unicode  3个bytes(字节)对应一个字符

encode:编码  将Unicode形式转化为utf-8等其他形式

decode:解码  将utf-8等其他形式转化为Unicode形式

Unicode形式的字符串的type是str,utf-8等其他形式的字符串的type是bytes;

Uincode就是我们看到的字符本身,utf-8等其他形式是存储进文件时的格式。

在涉及与文件、网页交互时,才会涉及到编码解码。


 

十三、文件操作

能调用方法的一定是对象:列表、字典、字符串,文件也属于对象。

1.打开文件

with open() as name  这样打开就不需要用close()函数了。

open('路径','操作方式')

1)路径:

''     : 当前同级目录
'/'    :根目录
'./'   :当前同级目录
'../'  :上级目录

①绝对路径:完整的描述文件位置的路径

②相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。 

2)操作方式:

①'r'   >>只读操作

②'w'  >>只写操作  打开文件后就把文件里的内容清空了

③'a'  >>添加操作  不清空,在后面添加

‘r+’   >>读写模式     必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了了之后再进行写入,常用 

⑤'w+'  >>写读模式  先将所有的内容清空,然后写入,最后读取。

⑥'a+'   >>追加读   不论先读还是后读,都读取不到数据。因为光标在最后面啊。

2.文件的方法:

1)read()   >>读操作

  参数:不加的话,默认全部读出来;

  加,一个字符==一个字节

readline()   >>一行一行的读

2)write()

写操作

3)close()    >>关闭文件

  用open打开的文件就需要用close关闭文件,

因为对文件进行操作时解释器可以关,但不能准确的关,所以有风险。

4)tell()  >>打印光标的位置

  英文:一个字节 == 一个字符

  中文:三个字节 == 一个字符

及中文的话,打印一个字符会出现3而不是1

5)seek()  >>调整光标的位置

  参数为  调整的位置

6)truncate() >>截断,不给参数从文件开头截断到当前位置,其余内容删除;

        给参数,将从开头开始截断指定长度,其余内容删除。

7)flush()  >>把缓存里的数据放入内存中

  用法:做一个进度条


多级菜单程序优化代码:

menu = {
'广东':{
'广州':{
'越秀区':{'东湖','白云','大东'},
'白云区':{'三元里','同和','永平'},
'天河区':{'沙东','沙河','黄村'},
},
'深圳':{
'南山区':{'西丽','沙河','水湾'},
'福田区':{'福田','梅林','华强北'},
'龙岗区':{'龙岗','龙城','横岗'},
},
'汕头':{
'潮南区':{'陈店','两英','司马浦'},
'龙湖区':{'珠池','新津','金霞'},
'濠江区':{'河浦','玉新','达濠'}
},
},
'浙江':{
'杭州':{
'上城区':{'湖滨','清波','望江'},
'临安区':{'青山湖','锦城','玲珑'},
'西湖区':{'北山','灵隐','文新'},
},
'宁波':{
'镇海区':{'庄市','骆驼','蛟川'},
'北仑区':{'春晓','梅山','郭巨'},
'奉化区':{'锦屏','江口','尚田'},
},
'温州':{
'龙湾区':{'永中','海城','沙城'},
'鹿城区':{'五马','滨江','七都'},
'洞头区':{'东屏','灵昆','元觉'}
},
},
'安徽':{
'合肥':{
'蜀山区':{'西园','稻香村','南七'},
'瑶海区':{'三里街','明光路','和平路'},
'庐阳区':{'十字街','新华街','中山街'},
},
'安庆':{
'迎江区':{'龙狮桥乡','长风乡','青龙'},
'大观区':{'德宽路','菱湖','集贤路'},
},
'淮北':{
'相山区':{'东山','相南','三堤口'},
'烈山区':{'杨庄','任楼','古饶'},
'杜集区':{'高岳','朔里','石台'}
},
},
}
current_dict = menu
parent_list = []
condition = True
while condition:
for keys in current_dict:
print(keys)
choice = input('请输入您要进入的地方:').strip()
if choice in current_dict:
parent_list.append(current_dict)
current_dict = current_dict[choice]
elif choice == 'q':
print('程序已退出,谢谢使用。')
condition = False
elif choice == 'r':
print('已返回上一级,请输入您要进入的地方:')
if parent_list:
current_dict = parent_list.pop()
else:
print('无此项,请重新输入您要进入的地方:')

有些瑕疵,不过确实完成了返回上一级,以及随时退出程序。
同样的程序,比起上一个,代码量少多了。
不过,只要能做出来就好了,现在还只是学习阶段,代码重构那是以后的事。








 

posted @ 2020-06-05 19:34  咕咕咕de小迷弟  阅读(160)  评论(0编辑  收藏  举报