day04_文件操作

文件操作:

   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())
View Code

文件操作的其他方法:

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("无此选项!")
View Code
     

猜你喜欢

转载自www.cnblogs.com/changqin3577/p/9911719.html