Python文件操作,看這篇就足夠!
↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能
后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


文件的存儲(chǔ)方式

| 模式 | 描述 |
|---|---|
| t | 文本模式 (默認(rèn))。 |
| x | 寫(xiě)模式,新建一個(gè)文件,如果該文件已存在則會(huì)報(bào)錯(cuò)。 |
| b | 二進(jìn)制模式。 |
| + | 打開(kāi)一個(gè)文件進(jìn)行更新(可讀可寫(xiě))。 |
| U | 通用換行模式(不推薦)。 |
| r | 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| rb | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。一般用于非文本文件如圖片等。 |
| r+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
| rb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。一般用于非文本文件如圖片等。 |
| w | 打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb | 以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| w+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。 |
| a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| ab | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| a+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
| ab+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
文件打開(kāi)模式有很多,但是我們實(shí)際用到的就只有六種。
我們總結(jié)一下主要用到的是下面六種。
| 模式 | 可做操作 | 若文件不存在 | 是否覆蓋文件原來(lái)內(nèi)容 |
| r | 只讀 | 報(bào)錯(cuò) | —— |
| r+ | 可讀、可寫(xiě) | 報(bào)錯(cuò) | 是 |
| w | 只寫(xiě) | 創(chuàng)建 | 是 |
| w+ | 可讀、可寫(xiě) | 創(chuàng)建 | 是 |
| a | 只寫(xiě) | 創(chuàng)建 | 否,追加寫(xiě) |
| a+ | 可讀、可寫(xiě) | 創(chuàng)建 | 否,追加寫(xiě) |

只讀模式打開(kāi)文件——只讀(r)

# 1.只讀模式打開(kāi)文件
file = open('read.txt')
# 2. 讀取文件內(nèi)容
text = file.read()
print(text)
# 3.關(guān)閉文件
file.close()
'''
Hello world
123456
python
'''
文件若不存在報(bào)錯(cuò):


讀寫(xiě)模式打開(kāi)文件——讀寫(xiě)模式(r+)

# 1.打開(kāi)文件
f = open('read.txt', 'r+')
# 2. 寫(xiě)入文件并且讀取文件內(nèi)容
f.write('666666')
text = f.read()
print(text)
# 3.關(guān)閉文件
f.close()
'''
world
123456
python
666666666666
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

會(huì)替換掉相同長(zhǎng)度的內(nèi)容
文件若不存在報(bào)錯(cuò):

寫(xiě)模式打開(kāi)文件——寫(xiě)模式(w)

# 1.只寫(xiě)模式打開(kāi)文件
f = open('read.txt', 'w')
# 2. 寫(xiě)入文件
f.write('abcdefg')
# 3.關(guān)閉文件
f.close()
print('數(shù)據(jù)寫(xiě)入完畢!')
'''
數(shù)據(jù)寫(xiě)入完畢!
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

這種操作會(huì)刪除原來(lái)的文件內(nèi)容,重新寫(xiě)入Python,
并且把光標(biāo)放在文件最開(kāi)始。
若文件不存在,系統(tǒng)會(huì)創(chuàng)建該文件夾并重新寫(xiě)入內(nèi)容



讀寫(xiě)模式打開(kāi)文件——讀寫(xiě)模式(w+)
# 1.讀寫(xiě)模式打開(kāi)文件
f = open('read.txt', 'w+')
# 2. 寫(xiě)入文件
for i in f:
print(i)
f.write('python! ')
# 3.關(guān)閉文件
f.close()
print('數(shù)據(jù)寫(xiě)入完畢!')
'''
數(shù)據(jù)寫(xiě)入完畢!
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

這種操作會(huì)刪除原來(lái)的文件內(nèi)容,重新寫(xiě)入Python,
并且把光標(biāo)放在文件最開(kāi)始。
若文件不存在,系統(tǒng)會(huì)創(chuàng)建該文件夾并重新寫(xiě)入內(nèi)容

利用這個(gè)原理所以文件寫(xiě)模式(w)、讀寫(xiě)模式(w+)還可以用作刪除文件內(nèi)容。
因?yàn)樗麄冋麄€(gè)工作原理就是把文件原來(lái)的內(nèi)容刪除,然后寫(xiě)入新的內(nèi)容。
如果我們寫(xiě)入的內(nèi)容為空,那么不就是刪除文件內(nèi)容。
# 1.讀寫(xiě)模式打開(kāi)文件
f = open('read.txt', 'w+')
# 3.關(guān)閉文件
f.close()
print('什么都不執(zhí)行!')
'''
什么都不執(zhí)行!
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

寫(xiě)模式打開(kāi)文件(追加內(nèi)容)——寫(xiě)模式(a)
'''
# 1.寫(xiě)模式打開(kāi)文件
f = open('read.txt', 'a')
# 2. 寫(xiě)入文件內(nèi)容
f.write('ppppppppppppp')
# 3.關(guān)閉文件
f.close()
print('代碼執(zhí)行結(jié)束!')
'''
代碼執(zhí)行結(jié)束!
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

可以看到是在原先內(nèi)容的基礎(chǔ)上在文末追加新的內(nèi)容!
若文件不存在,系統(tǒng)會(huì)創(chuàng)建新的文件夾并寫(xiě)入內(nèi)容


讀寫(xiě)模式打開(kāi)文件(追加內(nèi)容)——讀寫(xiě)模式(a)
# 1.讀寫(xiě)模式打開(kāi)文件
f = open('read.txt', 'a+')
# 2. 寫(xiě)入文件內(nèi)容
f.write('WWWWWWWWW')
# 3.關(guān)閉文件
f.close()
print('代碼執(zhí)行結(jié)束!')
'''
代碼執(zhí)行結(jié)束!
'''數(shù)據(jù)寫(xiě)入之前:

數(shù)據(jù)寫(xiě)入之后:

可以看到是在原先內(nèi)容的基礎(chǔ)上在文末追加新的內(nèi)容!
若文件不存在,系統(tǒng)會(huì)創(chuàng)建新的文件夾并寫(xiě)入內(nèi)容

二進(jìn)制模式打開(kāi)文件

我們看到了在文件打開(kāi)模式中有以下模式:rb、wb……有這種帶 b 的。
什么意思呢?
就是用二進(jìn)制的方式打開(kāi)文件。
# 1.讀寫(xiě)模式打開(kāi)文件
f = open('img.png')
# 2. 寫(xiě)入文件內(nèi)容
for i in f:
print(i)
print('代碼執(zhí)行結(jié)束!')
# 3.關(guān)閉文件
f.close()
'''
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb8 in position 19: illegal multibyte sequence
'''很明顯,我們出現(xiàn)了以下錯(cuò)誤:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x82 in position 0: incomplete multibyte sequence主要原因是因?yàn)榫幋a的問(wèn)題,可能是因?yàn)?x82這個(gè)字節(jié)在gbk編碼中沒(méi)有這個(gè)字符,
可能原字符是兩個(gè)字節(jié),在gbk里被解析成了一個(gè)字節(jié),導(dǎo)致字符不存在。
這就是我們文件打開(kāi)方式需要使用二進(jìn)制讀取的原因。
# 1.讀寫(xiě)模式打開(kāi)文件
f = open('img.png', 'rb')
# 2. 寫(xiě)入文件內(nèi)容
for i in f:
print(i)
print('代碼執(zhí)行結(jié)束!')
# 3.關(guān)閉文件
f.close()
'''
代碼執(zhí)行結(jié)束!
'''

文件操作

open 函數(shù)負(fù)責(zé)打開(kāi)文件,并且返回文件對(duì)象
read /write / close 三個(gè)方法都需要通過(guò)文件對(duì)象 來(lái)調(diào)用
| 序號(hào) | 函數(shù)/方法 | 說(shuō)明 |
|---|---|---|
| 1 | open | 打開(kāi)文件,并且返回文件操作對(duì)象 |
| 2 | read | 將文件內(nèi)容讀取到內(nèi)存 |
| 3 | write | 將指定內(nèi)容寫(xiě)入文件 |
| 4 | close | 關(guān)閉文件 |
# 1.打開(kāi)文件
file = open("read.txt")
# 2. 讀取文件內(nèi)容
text = file.read()
print(text)
# 3.關(guān)閉文件
file.close()文件和文件夾的操作
在Python中?件和?件夾的操作要借助os模塊??的相關(guān)功能,
具體步驟如下:
導(dǎo)?os模塊
import os使? os 模塊相關(guān)功能
1、文件重命名
os.rename(?標(biāo)?件名, 新?件名)import os
# 重命名文件
os.rename('read.txt', 'new_read.txt')
print('重命名成功!')
'''
重命名成功!
'''2、刪除文件
os.remove(?標(biāo)?件名)import os
# 刪除文件
os.remove('new_read.txt')
print('刪除成功!')
'''
刪除成功!
'''3、創(chuàng)建文件夾
os.mkdir(?件夾名字)import os
# 創(chuàng)建文件夾
os.mkdir('read.txt')
print('新文件夾創(chuàng)建成功!')
'''
新文件夾創(chuàng)建成功!
'''
4、刪除文件夾
os.rmdir(?件夾名字) import os
# 刪除文件夾
os.rmdir('read.txt')
print('文件刪除成功!')
'''
文件刪除成功!
'''
5、獲取當(dāng)前目錄
os.getcwd()import os
print(os.getcwd())
'''
E:\python\project++\文件操作
'''
6、改變默認(rèn)目錄
os.chdir(?錄)import os
os.chdir('E:\python\project++')
print(os.getcwd())
'''
E:\python\project++
'''
7、獲取目錄列表
os.listdir(?錄)import os
print(os.listdir('E:\python\project++'))
'''
['.idea', 'college', 'Daily test', 'mult_xiangqin', 'pandas技巧', 'travel_summer', '動(dòng)圖獲取', '匿名函數(shù)', '打針', '文件操作', '漢服小姐姐', '貓眼_動(dòng)態(tài)網(wǎng)站', '王思聰語(yǔ)錄', '瓜子二手車', '網(wǎng)易文胸', '騰訊招聘', '萌妹子', '虎牙']
'''
總結(jié)
推薦閱讀
