day04_檔案操作
阿新 • • 發佈:2018-11-05
檔案操作:
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(): #View Code這是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("無此選項!")View Code