文件操作:
f=open.('test.txt', 'r',encoding='utf-8')
f=open.('test.txt','w',encoding='utf-8') #以写的方式打开文件,先清空文件内容再写入,写入时默认不换行
f=open.('test.txt','a',encoding='utf-8') #以追加的方式打开文件,默认在文件末尾追加
f=open('test.txt','r+',encoding='utf-8') #读的时候光标是从0开始,而写的时候永远是从最后面写
f.read() #默认速出文件所有内容,添加参数,可以指定字符个数 for循环时一个一个字符的读
f.readline()# 默认读出文件一行 的内容,添加参数,可以指定行数
f.readlines() #默认读出文件所有内容,返回一个列表
f.write('0000\n') #默认不换行写入
练习:打印所有行,第三行加入‘000’
1 num=0 2 for i in f.readlines(): # 这是for内部将f对象做成一个迭代器,用一行去一行 3 num+=1 4 if num==3: 5 i=''.join([i.strip(),'000']) #取代加号 6 print(i.strip())
文件操作的其他方法:
f.tell() #输出光标的位置
f.seek(0) # 从光标为0的位置开始读写等。例如执行2条读的操作,光标位置从1---->5,输出:床前明月光
正常情况再读的话从6 开始读,即 疑是地上霜
使用seek(0)后,还是从0的位置开始读,
f.truncate()
用于截断文件并返回截断的字节长度。
指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当 前位置,其余内容删除。与seek可以配合使用
作业:
1.三级菜单,可以随时返回、退出
2.可以删除当前层的值,可以添加、修改
3.最后的数据都要保存在文件中
1 # menu={ 2 # '北京':{ 3 # '海淀':{ 4 # '五道口':['清华','北大','首体'], 5 # '上地':['百度','新浪','网易'], 6 # '呼家楼':['国贸','电视台','PICC'], 7 # }, 8 # '朝阳':{ 9 # '呼家楼':['农业','IT','ICBC'], 10 # '双井':['炸鸡','啤酒','白酒'], 11 # '劲松':['阿里','网吧','饭馆'], 12 # }, 13 # '东城':{ 14 # '北京站':['招商','工行','建设'], 15 # '灯市口':['王府井','天安门','金宝'], 16 # '菜市口':['天坛','达内','23路'], 17 # }, 18 # }, 19 # '上海':{ 20 # '闵行':['七宝','南站','上海站'], 21 # '宝山':['水产','吴淞','松宝'], 22 # '浦东':['机场','车站','十里洋场'], 23 # }, 24 # '河北':{ 25 # '唐山':['路北','路南','丰南'], 26 # '秦皇岛':['昌黎','开发区','卢龙'], 27 # '廊坊':['建设','招商','民生'], 28 # }, 29 # '浙江':{ 30 # '杭州':['西湖','萧山','滨江'], 31 # '金华':['农行','工行','火腿'], 32 # '绍兴':['交通','浙大','鲁迅'], 33 # } 34 # } 35 f=open('work2.txt','r',encoding='utf-8') 36 menu=eval(f.read().strip()) # 将列表变成字典 37 current_layer = menu 38 parent_layer = [menu] 39 while True: 40 for key in current_layer: 41 print(key) 42 choice = input('[b]上级[a]增加[d]删除[e]修改[q]退出:').strip() 43 if choice in current_layer: 44 if isinstance(current_layer,dict): #判断当前层是不是字典,是字典则继续进入下一层 45 parent_layer.append(current_layer) # 先记录当前层(就是下一层的父层) 46 current_layer = current_layer[choice] # 进入选择的子层 47 else: 48 print('这是最后一层了!请按b返回') 49 elif choice == 'a': 50 add_choice = input('增加:') 51 befor = str(current_layer) 52 current_layer[add_choice]={} 53 after = str(current_layer) 54 f_write = open('work2.txt','w',encoding='utf-8') 55 f_write.write(str(parent_layer[0]).replace(befor,after)) #parent_layer[0] 是固定值,是没改之前的整个字典 56 # befor是改之前的小字典(子层) after是改后的小字典(子层) 所以将更改后的更新合并到parent_layer字符串中就形成了新的字符串 57 elif choice == 'e': 58 befor = input('修改:') 59 if befor in current_layer: 60 after = input('修改为:') 61 current_layer[after]=current_layer.pop(befor) 62 else: 63 print('无此选项!') 64 f_write = open('work2.txt','w',encoding='utf-8') 65 f_write.write(str(parent_layer[0]).replace(befor,after)) 66 elif choice == 'd': 67 del_choice = input('删除:') 68 befor = str(current_layer) 69 if del_choice in current_layer: 70 del current_layer[del_choice] 71 after = str(current_layer) 72 f_write=open('work2.txt','w',encoding='utf-8') 73 f_write.write(str(parent_layer[0]).replace(befor,after)) 74 elif choice == 'b': 75 if parent_layer: 76 print("已经是最后一层!") 77 current_layer = parent_layer.pop() 78 elif choice == 'q': 79 break 80 else: 81 print("无此选项!")