1. 程式人生 > >day04_檔案操作

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