1.文件讀模式 r f = open("helloworld", 'r', encoding="utf-8") 文件句柄: "helloworld" 表示讀的文件的文件名, 'r' 代表讀模式, encoding="utf-8" 表示字元編碼形式為utf-8。 有open就有close,不管是讀文件 ...
1.文件讀模式 r
f = open("helloworld", 'r', encoding="utf-8")
文件句柄:
"helloworld" 表示讀的文件的文件名,
'r' 代表讀模式,
encoding="utf-8" 表示字元編碼形式為utf-8。
有open就有close,不管是讀文件還是寫文件,最後一定要關閉文件,f.close()
f = open("helloworld", 'r', encoding="utf-8") s1 = f.read() print(s1) f.close() #輸出 Hello World!
f = open("helloworld", 'r', encoding="utf-8") s1 = f.read() s2 = f.read() # 文件讀完一遍就沒了 print(s1) print(s2) # 所以s1後面就沒了,什麼都沒有 f.close() #輸出 Hello World!
2.文件寫模式 w
f = open("helloworld", 'w', encoding="utf-8")
文件句柄:
"helloworld" 表示寫的文件的文件名,這裡的helloworld上面已經讀過了,表示已經存在,那麼這裡寫模式還是在helloworld文件里寫,那麼原來的內容則被現在寫的文件內容替換,並不會在原來的內容下麵接著寫。當然如果文件名是不存在的文件,比如說"helloworld2",那麼會自動(可以不手動創建)幫我們新建一個文件名為helloworld2的文件,並且將寫的內容添加在文件里。
'w' 代表讀模式,
encoding="utf-8" 表示字元編碼形式為utf-8。
需要註意的是這裡是寫 w 模式,只能寫f.write(),不能寫完之後再進行讀文件f.read();w就只能是寫,r就只能是讀
f = open("helloworld", 'w', encoding="utf-8") f.write("Python\n") f.write("hello world") f.close() #運行之後helloworld文件里內容為 Python hello world #而原本的helloworld文件里的內容是 Hello World!
3.既能讀又能寫 r+模式
f = open("helloworld2", 'r+', encoding="utf-8")
文件句柄:
"helloworld2" 表示讀寫的文件的文件名,
'r+' 代表讀寫模式,可以追加
encoding="utf-8" 表示字元編碼形式為utf-8。
helloworld2文件里原本的內容為:
Hello World
Python
wll
luyue
shenyuqian
jiangxiaoxia
wangrong
shiyuting
f = open("helloworld2", 'r+', encoding="utf-8") print(f.readline().strip()) print(f.readline().strip()) print(f.readline().strip()) f.write("--------------------------") print(f.readline().strip()) #輸出 Hello World Python wll luyue #helloworld2文件里的內容現在變為 Hello World Python wll luyue shenyuqian jiangxiaoxia wangrong shiyuting--------------------------
補充:代碼里的f.readline()是指一行一行地讀文件,第一個f.readline()就是讀文件的第一行,所以就輸出Hello World,第二個就是讀第二行,以此類推下去,我們又寫了一行“----------------”,但結果是追加在了最後,而不是在第三行後面,是因為 r+ 模式就是寫的內容追加在最後,就這麼規定的沒辦法。.strip()是把空格和換行都去掉,好看一點而已。
4.既能讀又能寫 w+模式
f = open("helloworld2", 'w+', encoding="utf-8")
文件句柄:
"helloworld2" 表示寫讀的文件的文件名,
'w+' 代表寫讀模式,沒啥用,不能追加,這裡的helloworld2已經存在,所以寫讀之後寫的內容會覆蓋原來helloworld2文件里原來的內容。
encoding="utf-8" 表示字元編碼形式為utf-8。
f = open("helloworld2", 'w+', encoding="utf-8") # w+是寫讀模式,沒啥用 f.write("Hello World\n") f.write("Python\n") f.write("wll\n") f.write("ly\n") print(f.tell()) #tell()字元的計數 f.seek(5) # 游標指到第五個字元這裡,其實也不好使,沒有辦法在指定的游標這裡寫,只能寫後面 print(f.readline()) #讀一行的第五個字元後面的內容,readline只讀一行 f.write("jiang\n") #這裡的內容只能寫在最後 f.close() #輸出 30 World
5.二進位文件 讀 rb模式
f = open("helloworld2", 'rb')
文件句柄:
"helloworld2" 表示讀的文件的文件名,
"rb" 代表二進位文件讀的模式
用到rb模式有兩種情況,一是網路傳輸只能用二進位格式,二是二進位文件必須用二進位打開
f = open("helloworld2", 'rb') print(f.readline()) print(f.readline()) f.close() #輸出 b'Hello World\r\n' b'Python\r\n' #b表示位元組,byte類型
6.二進位文件 寫 wb模式
f = open("helloworld", 'wb')
文件句柄:
"helloworld" 表示讀的文件的文件名,
"wb" 代表二進位文件寫的模式
f = open("helloworld", 'wb') f.write("hello Tom\n".encode()) f.close() #helloworld文件原本的內容是 Hello Word! #運行之後helloworld文件的內容變為 hello Tom
7.寫 a模式
f = open("heloworld2", 'a', encoding="utf-8")
文件句柄:
"helloworld2" 表示寫讀的文件的文件名,
'a' 代表append追加,不覆蓋原來的文件了,繼續往後寫,但是還是不能讀文件
encoding="utf-8" 表示字元編碼形式為utf-8。
f = open("helloworld2", 'a', encoding="utf-8") f.write("syq\n") f.write("jxx\n") f.close() #helloworld2原來的內容為 Hello World Python wll ly jiang #執行之後的內容為 Hello World Python wll ly jiang syq jxx
8.a+ 追加讀寫,但也只能是在後面寫
9.讀文件
(1)讀文件的兩種方式
f = open("helloworld2", 'r', encoding="utf-8") s = f.read().strip() print(s)
f = open("helloworld2", 'r', encoding="utf-8") info = f.readlines() for i in info: print(i.strip()) f.close()
(2)讀前三行
f = open("helloworld2", 'r', encoding="utf-8") for i in range(3): print(f.readline().strip()) #輸出 Hello World Python wll
(3)第三行上下分割
f = open("helloworld2", 'r', encoding="utf-8") for index, line in enumerate(f.readlines()): if index == 3: print("---------------------") continue print(line.strip()) #輸出 Hello World Python wll --------------------- jiang syq jxx
# 高效的迴圈方法 f = open("helloworld2", 'r', encoding="utf-8") count = 0 for line in f: if count == 3: print("---------------------") count += 1 continue print(line.strip()) count += 1 #輸出 Hello World Python wll --------------------- jiang syq jxx
10.文件修改
f = open("helloworld2", "r", encoding="utf-8") f_new = open("helloworld2.bak", "w", encoding="utf-8") for line in f: if "wll" in line: line = line.replace("wll", "wulanlan") f_new.write(line) f.close() f_new.close() #helloworld2內容 Hello World Python wll ly jiang syq jxx #helloworld.bak內容 Hello World Python wulanlan #將wll改成了wulanlan ly jiang syq jxx
11.f.close()是不是經常忘了寫,總是經常忘記關閉,就用with,為了幫你自動關閉文件
with open("helloworld2", "r", encoding="utf-8") as f, \ open("helloworld", "r", encoding="utf-8") as f2: # 打開多個文件,一行不應該超過八十個字元,所以折行寫 for line in f: print(line.strip()) #輸出 Hello World Python wll ly jiang syq jxx