1. 程式人生 > >文件系統的一些常用操作方法

文件系統的一些常用操作方法

取代 tel 指定位置 and out with 截斷 換行符 wrapper

  2 #date:  17/10/5
  3 import time ,sys
  4 #練習文件的操作
  5 #實現三級菜單
  6 #今天任務
  7 
  8 #能調用方法的一定是對象
  9 ##三種基本的操作模式 r(只可讀) w(只可寫) a(追加)
 10 #一般步驟:創建文件對象 --->調用文件方法操作 ------>關閉文件
 11 #===========讀
 12 #file = open(‘1‘,‘r‘,encoding = ‘utf8‘)#返回的是一個文件對象
 13 #re = file.read(5) #可以指定要讀幾個字符
 14 #file.write(‘哈哈哈哈‘) #註意這裏會報錯,讀只能讀,不能寫
15 #print(re) 16 #file.close() 17 18 19 #===========寫 20 # file = open(‘1‘,‘w‘,encoding = ‘utf8‘)#<class ‘_io.TextIOWrapper‘> 21 # #file.write(‘五星紅旗我為你自豪‘) #首先會做一個清空的操作,然後把你要寫的內容寫入文件中 22 # file.read()#這裏會報錯,因為寫只能寫不能再去讀 23 # file.close() 24 25 26 #如果文件沒有關閉,數據會被緩存下來,不會寫入磁盤中 27 #
file = open(‘1‘,‘w‘,encoding=‘utf8‘) 28 # file.write(‘開心快樂每一天‘) 29 # time.sleep(30) 30 # file.close() 31 32 33 #================具體的操作方法 34 #f = open(‘1‘,‘r‘,encoding=‘utf8‘) 35 # print(f.read(2)) 36 # print(f.read(2)) #註意 :漢字在這裏占一個單位(in Py3) 37 # print(f.readline()) 38 # print(f.readline())
39 # print(f.readline())#從光標位置開始讀一行,無論是read還是readline/readdlines光標的位置都會發生變化 40 # print(f.readlines())#返回一個列表,列表包含了文件的每一行內容,並且有換行符 41 # #[‘開心快樂每一天3\n‘, ‘開心快樂每一天4\n‘, ‘開心快樂每一天5\n‘, ‘開心快樂每一天6‘] 42 # f.close() 43 44 45 #=================通過循環逐行讀取文件內容 46 # data = f.readlines() 47 #number = 0 48 # for i in data: 49 # number += 1 50 # if number == 5: 51 # i = ‘‘.join([i.strip(),‘handle\n‘]) 52 # print(i.strip()) 53 # f.close() 54 ##########對於大數據文件,要用以下方式(the best way): 55 # number = 0 56 # for file_content in f:#解釋:這是for內部將f做成一個叠代器,用一行取一行 57 # number += 1 58 # if number == 5: 59 # file_content = ‘‘.join([file_content.strip(),‘handle\n‘])#取代萬惡的+ 60 # print(file_content.strip()) 61 # f.close() 62 63 #=====基本操作 64 # print(f.tell()) #0 作用:獲取當前光標所在位置 * 65 # print(f.read(2)) #開心 66 # print(f.tell()) #返回6 一個中文3個字節在utf8中 67 # print(f.read(2)) #快樂 68 # print(f.tell()) #12 69 # print(f.seek(0)) #移動光標到指定的位置 * 70 # print(f.tell()) 71 # print(f.read(2)) 72 73 74 #==========進度條的實例 75 #flush 作用把緩存裏面的數據轉移到磁盤上,可以用它做進度條 76 #sys.stdout 作用可以在終端上顯示某個內容 77 #不加flush的時候:*並沒有直接放入內存,而是放入緩沖區,暫時看不到,刷新完才能看,30個全放完結束了,一次性給用戶看 78 #終端也是文件對象, 79 # 80 # for i in range(30): 81 # sys.stdout.write("*") #如果不加flush,他是一個一個把*放入緩沖中,直到全部放完,他才把他們放入磁盤中 82 # sys.stdout.flush()#進入緩沖區立刻更新,放一個更新一個,不等你全部放完 83 # time.sleep(0.2) 84 # f.close() 85 86 87 #======= 88 # f = open(‘1‘,‘w‘,encoding=‘utf8‘) 89 # #truncate() 截斷數據,不能再r模式下 ,默認不加參數是從開頭一直截取 90 # #在w模式下:先清空,再寫,再截斷 (沒有意義) 91 # #在a模式下:直接將指定位置後的內容截斷 92 # f.truncate(9)#如果是中文的話默認3個字節,他會把前兩個字符保留,之後的內容截斷 93 # f.write(‘hello world‘) 94 # f.truncate(5) 95 # f.write(‘11hello world‘) 96 # 97 # f.close() 98 99 #======r+ w+ a+ 100 #fileno 文件描述符,整數唯一 101 102 #a+ 光標默認在最後位置,開始寫 103 #w+ 先清空,再寫讀 104 #f = open(‘1‘,‘r+‘,encoding=‘utf8‘) 105 106 #------驗證r+模式 107 #r+ 光標默認在第0個位置,但是是在最後位置開始寫 108 #f = open(‘1‘,‘r+‘,encoding=‘utf8‘) 109 #print(f.tell()) 110 #print(f.readline()) 111 # f.write(‘ccckk‘) 112 113 #------驗證w+模式 114 #w+ 先清空,再寫讀 115 # f = open(‘1‘,‘w+‘,encoding=‘utf8‘) 116 # print(f.readline()) #因為先清空了,所以沒有內容 117 # print(f.tell())# 0 118 # print(f.write(‘阿帕帕‘)) #開始寫入 119 # print(f.tell()) #光標移動到了最後 120 # #print(f.seek(0)) #所以想看到就移動光標到開始位置 121 # print(f.readline()) #所以在讀取還是沒有 122 123 #------驗證a+模式 124 #a+ 光標默認在最後位置,開始寫 125 #f = open(‘1‘,‘a+‘,encoding=‘utf8‘) 126 #print(f.tell()) #217 127 #print(f.readline())#讀不到,因為光標在最後 128 #f.write(‘ccckk‘) 129 130 131 #-----終極問題如何修改:只能采取重新創建一個文件的思路 132 #例子:將第5行最後面追加個hello 133 #方法一: 134 # f_read = open(‘1‘,‘r‘,encoding=‘utf8‘) 135 # f_write = open(‘2‘,‘w‘,encoding=‘utf8‘) 136 # num = 0; 137 # for i in f_read: 138 # num +=1 139 # if num == 5: 140 # i = ‘‘.join([i.strip(),‘hello\n‘]) 141 # f_write.write(i) 142 # f_read.close() 143 # f_write.close() 144 145 #方法二 with 方法 同時管理多個文件對象(推薦使用這種,不用我們手動關閉文件了) 146 num = 0; 147 with open(1,r,encoding=utf8) as r, open(2,w,encoding=utf8) as w : 148 for i in r: 149 num +=1 150 if num == 5: 151 i = ‘‘.join([i.strip(),hello_girl\n]) 152 w.write(i)

文件系統的一些常用操作方法