with open("文件名","打開方式",encoding="utf8") as f: 推薦用這種文件打開方式,不用關閉文件而且可以同時打開兩個文件,如下: ? ? ? ? ? ? ?with open("db","r",encoding="utf8") as f1, open("db2","w",encoding="utf8") as f2
例子:用“b”打開文件
1#用b打開文件 2 with open("db","wb") as f:
3 temp=bytes("張燕",encoding="utf8")
4print(temp)
5 f.write(temp)
6 with open("db","rb") as f:
7print(f.read())
8 9執行結果:
10 b'\xe5\xbc\xa0\xe7\x87\x95'11 b'\xe5\xbc\xa0\xe7\x87\x95'用b打開文件
二. 操作文件
read(): 無參數,讀全部;有參數(n),文件打開加b的話讀取n個字節,無b的話讀取n個字符
tell(): ?獲取當前指針的位置(字節)
seek():指針跳到指定位置(字節)
write():寫數據,文件打開加b的話,寫字節;無b的話,寫字符
fileno():文件描述符
flush():從內存刷到硬盤
readable():文件可讀返回True,否則False
readline():讀取一行
truncate():截斷文件,會把指針之后的內容全部刪除
for line in f:循環文件每一行
f.close():關閉文件
1#seek是不受encoding的影響的,seek都是按字節的,如果你有中文,seek(1)會把這個中文劈開 2 with open("db","r+",encoding="utf8") as f:
3 f.seek(3)
4 f.write("flag")
5 6執行前db內容:
7 ab張燕ijklmnopqrstuvwxyz張杰
8執行后db內容:
9 ab�flag�ijklmnopqrstuvwxyz張杰
1011#tell()獲取當前指針的位置,和seek一樣也是按字節來算的12 with open("db","r+",encoding="utf8") as f:
13print(f.read())
14 with open("db","r+",encoding="utf8") as f:
15print(f.read(2))
16print(f.tell())
1718執行結果:
19張燕abcdefghijklmnopqrstuvwxyz
20張燕
21 6 seek和tell 1#f.write() 從指針位置開始寫,如果指針在文件中間會覆蓋對應的字節 2# 但是如果一旦開始讀文件,不管有沒有讀到文件尾,python規定都會從文件尾開始寫 3 with open("db","r+",encoding="utf8") as f:
4 f.seek(2)
5 f.write("張燕")
6 f.seek(0) #主動把指針調到文件開頭
7 data = f.read(12)
8print(data)
9 f.write("張杰")
10 f.seek(0)
11 data = f.read()
12print(data)
1314執行結果:
15ab張燕ijklmnop
16 ab張燕ijklmnopqrstuvwxyz張杰 write 1#f.truncate() 2#截斷文件,會把指針之后的內容全部刪除 3 with open("db","r+",encoding="utf8") as f:
4print(f.read())
5 f.seek(3)
6 f.truncate()
7 f.seek(0)
8print(f.read())
910執行結果:
11 1234567890
12 123 truncate