一 檔案介紹
1.什麼是檔案
狹義說:文本檔案;廣義說:超文本檔案, 圖檔,聲音,超連結,視訊。
2.檔案的分類
檔案大體上可以分為兩類,檔案檔案和二進制檔案。
3.檔案的作用
使用檔案的目的是把一些資料存儲存放起來。
4.使用檔案的流程
我們操作一個檔案的流程一般是打開檔案,讀寫檔案,關閉檔案。通過程式操作檔案的流程也是這三步,首先打開檔案,然後讀寫檔案,最後關閉檔案
二 讀寫檔案簡單操作
基于檔案的操作 有如下方法 我們通過代碼會列舉介紹
讀取操作 | r | 以隻讀方式打開檔案。檔案的指針将會放在檔案的開頭。這是預設模式。 |
rb | 以二進制格式打開一個檔案用于隻讀。檔案指針将會放在檔案的開頭。一般用于非文本檔案如圖檔等。 | |
r+ | 打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。 | |
rb+ | 以二進制格式打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。一般用于非文本檔案如圖檔等。 | |
寫操作 | w | 打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 |
wb | 以二進制格式打開一個檔案隻用于寫入。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。一般用于非文本檔案如圖檔等。 | |
w+ | 打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。 | |
wb+ | 以二進制格式打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。一般用于非文本檔案如圖檔等。 | |
a | 打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 | |
ab | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。 | |
a+ | 打開一個檔案用于讀寫。如果該檔案已存在,檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。如果該檔案不存在,建立新檔案用于讀寫。 | |
ab+ | 以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果該檔案不存在,建立新檔案用于讀寫。 |
1 讀檔案 read
r
file = open('file/a.txt',mode = 'r')
ret = file.read() #讀取檔案中的所有内容
print(ret)
file.close()
file叫做檔案句柄,或者檔案對象 用來操作檔案
第一個參數是檔案的路徑,第二個參數 mode= 是通路檔案的模型 r 表示讀 預設也是r 模式
rb
file = open('121.jpg',mode='rb')
ret = file.read()
print(ret)
file.close()
"""
b'\xff\xd8\xff\xe1\x000Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x01\x011\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x1a\x00\x00\x00\x00www.meitu......
"""
r+
file = open('aa.txt',mode='r+')
ret = file.read()
print(ret)
file.close()
"""
abcdefg #指會放在檔案的開頭,下次操作時時會從光标處開始
hijklmn
"""
2 寫操作 wirte
w 隻用于寫入
注意 1檔案不存在,會建立檔案(不會建立目錄) 2 會覆寫掉源檔案的内容重新寫入
file = open('1ji/bb.txt',mode='w')
file.write('zzz')
file.close()
w+ 可用于讀寫 其他作用和w一緻
file = open('1ji/bb.txt',mode='w+')
file.write('zzzaaa')
ret = file.read() #讀出的内容為空 因為光标的位置在最後
print(ret)
file.close()
a 追加 和 w不同的是,a 所添加的内容是追加在檔案後邊的,不會覆寫之前檔案的内容 同樣,如果檔案不存在,則會建立一個新的檔案
file = open('1ji/bb.txt',mode='a')
file.write('zzzaaa')
file.close()
a+ a+可以進行讀寫
file = open('1ji/bb.txt',mode='a+')
file.write('zzzaaa')
ret = file.read() #讀出的内容為空 因為光标的位置在最後
print(ret)
file.close()
具體操作
read()
調用read()會一次性讀取檔案的全部内容,如果檔案有10G,記憶體就爆了,會容易導緻程式卡死,是以,要保險起見,可以反複調用read(size)方法,每次最多讀取size個位元組的内容
file = open('aa.txt')
ret = file.read(3)
print(ret)
file.close()
readline()
readline 每次讀取一行,并且自帶換行功能,每一行末尾會讀到\n
file = open('1ji/bb.txt')
ret = file.readline()
print(len(ret))
print(ret)
print(file.readline())
print(file.readline(3))
file.close()
"""
6
qwert
asdaa
"""
readlines()
一次性以行的形式讀取檔案的所有内容并傳回一個list,需要去周遊讀出來
file = open('1ji/bb.txt')
ret = file.readlines()
print(ret)
'''
['qwert\n', 'asdaa\n', 'ssssa']
'''
循環讀取
file句柄是一個可疊代的對象,是以,可以循環讀取檔案中的内容 每次隻讀一行
file = open('1ji/bb.txt')
for line in file:
print(line)
qwert
asdaa
ssssa
write()
file = open('1ji/bb.txt',mode='w')
file.write('aaaaa')
file.write('bbb')
file.close()
writelines()
file.writelines(seq) 把seq的内容全部寫到檔案中(多行一次性寫入)
file = open('1ji/bb.txt',mode='w')
lst = ['aa\n','bb','cc']
file.writelines(lst)
file.close()
"""
aa
bbcc
"""
其他操作
1 tell
擷取檔案當中目前光标所在的位置
file = open('1ji/bb.txt',mode='r')
ret = file.read(3)
pos = file.tell()
print(pos)
print(ret)
file.close()
"""
4
aa
"""
seek()
seek 移動光标位置
參數:
offset 移動的長度(位元組)
whence 相對位置 0 從頭(預設),1從目前 2從末尾
file = open('1ji/bb.txt',mode='r')
print(file.read(3))
# file.seek(0,0)
file.seek(0,1)
# file.seek(0,2) #空
ret= file.read(3)
print(ret)
file.close()
name 和 mode
file.name 傳回 路徑
file.mode 傳回 檔案讀寫模式
file = open('1ji/bb.txt','r')
print(file.name) #傳回路徑 1ji/bb.txt
print(file.mode) # r
file.close()
with
使用with方式操作檔案,可以不用關閉檔案,會自動關閉檔案。
with open('1ji/bb.txt') as file:
ret = file.read()
print(ret)
亂碼
python讀寫檔案時,預設使用的編碼為平台編碼,也就是gbk。
在pycharm中建立的檔案預設使用的是utf-8編碼
1,往pycharm中的1ji.bb中儲存内容
with open('1ji/bb.txt',mode='w',) as file:
file.write('哈哈')
2 向磁盤中檔案儲存内容能,不亂碼。
指定編碼
with open('1ji/bb.txt',mode='w',encoding='utf-8') as file:
file.write('哈哈')