Python學(xué)習(xí)之文件的創(chuàng)建與寫入詳解
在前面章節(jié)我們通過 os包學(xué)習(xí)了如何創(chuàng)建、讀取一個文件夾,但是并沒有學(xué)習(xí)如何創(chuàng)建、讀寫一個文件,接下來我們就學(xué)習(xí)關(guān)于文件的處理。當(dāng)我們學(xué)習(xí)完文件處理之后,就可以隨意讀寫文件。
內(nèi)置函數(shù) - open 獲取文件對象
open() 函數(shù)
open()函數(shù)是是python的讀寫文件的基本函數(shù),它可以生成文件對象可以創(chuàng)建,也可以操作文件的讀寫。
用法:
open(path, mode)
參數(shù)說明:
path:文件路徑
mode:操作模式;比如讀文件的模式,寫文件的模式。下文有詳細(xì)介紹
返回值:
文件對象
示例用法如下:
file = open('d://test.txt', 'w') # >>> 代碼釋義:使用 open() 函數(shù) 對 D 磁盤下的 'test.txt' 文件執(zhí)行寫入的操作 ( w 為寫入的操作 ) 并賦值給變量 file
利用文件對象進(jìn)行創(chuàng)建與寫入
文件操作的寫入模式
模式 | 介紹 |
---|---|
w | 創(chuàng)建文件(w為寫入的操作,當(dāng)文件不存在時,則會創(chuàng)建文件;已創(chuàng)建文件,則內(nèi)容會被覆蓋) |
w+ | 創(chuàng)建文件并讀取文件 |
wb | 二進(jìn)制形式創(chuàng)建文件(與 w 的功能相同,只不過 web 的寫入類型為 byte ) |
wb+ | 二進(jìn)制形式創(chuàng)建或追加內(nèi)容(如果文件存在不會覆蓋原本的內(nèi)容,而是以 byte 類型進(jìn)行追加) |
a | 在文件中追加內(nèi)容,如果沒有該文件則會創(chuàng)建文件 |
a+ | 讀寫模式追加(同樣是追加內(nèi)容,只不過賦予了讀取的功能) |
ab+ | 二進(jìn)制形式讀寫追加(可以追加并讀取 byte 類型的模式) |
文件對象的寫入操作方法
方法名 | 參數(shù) | 介紹 | 舉例 |
---|---|---|---|
write | Message(字符串) | 寫入信息 如果是帶有b的模式,則會變?yōu)?byte 類型 | f.write(‘hello\n’) |
writelines | Message_list(列表) | 批量寫入 列表內(nèi)須是字符串,按照索引位置依次寫入; 若為b的模式,同上 | f.writelines([‘a\n’, ‘b\n’]) |
close | 無 | 關(guān)閉并保存文件 | f.close() |
注意:操作文件完成后,必須使用 close 方法?。?!不然可能會造成內(nèi)存占用,如果反復(fù)生成文件對象進(jìn)行寫入操作,可能會造成內(nèi)存溢出,我們的程序就會出問題了。
使用 w 模式 執(zhí)行 write 方法
import os import os.path current_path = os.getcwd() # print(current_path) file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8') # 注意如果是在WIN系統(tǒng),在寫入中文時,需要設(shè)置編碼格式;如果不是WIN系統(tǒng),則不需要設(shè)置編碼格式 file_test.write('Python 是一門優(yōu)雅的編程語言') file_test.close()
上文腳本我們提及,如果是在WIN系統(tǒng),在寫入中文時,需要設(shè)置編碼格式。如果不設(shè)置編碼格式,雖然不會報錯,也可以寫入成功。但是打開寫入的文件,就如同下圖:
我們繼上面演示的案例,在 text.txt 文件的基礎(chǔ)上,繼續(xù)演示 w 模式的功能。
import os import os.path current_path = os.getcwd() # print(current_path) file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8') file_test.write('Python 是一門優(yōu)雅的編程語言') file_test.close() file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'w', encoding='utf-8') file_test.write('Python 不僅是一門優(yōu)雅的編程語言,還不掉頭發(fā)')
可以看到我們針對 text.txt 文件的基礎(chǔ)上,繼續(xù)演示的 w 模式 新傳入的 Python 不僅是一門優(yōu)雅的編程語言,還不掉頭發(fā) 已經(jīng)覆蓋了 text.txt 文件原本的內(nèi)容。
使用 w+ 模式 執(zhí)行 write 方法
這里我們先 利用 w+ 模式 寫入內(nèi)容
import os.path current_path = os.getcwd() file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'w+', encoding='utf-8') file_test.write('人生苦短 我用Python') file_test.close()
區(qū)別于 w 模式,w+ 模式 不僅可以創(chuàng)建文件,還可以讀取文件。下面我看看看 如何 讀取文件。(需要注意的是,讀取的操作需要在終端操作,Pycharm 不顯示讀取的結(jié)果)
import os.path current_path = os.getcwd() file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'w+', encoding='utf-8') file_test.write('人生苦短 我用Python') file_test.read() file_test.seek(0) file_test.read() file_test.close()
注意:只有 w+ 模式可以使用 read() 與 seek() 函數(shù) 讀取文件內(nèi)容 ,w 模式使用 read() 函數(shù) 讀取文件內(nèi)容會報錯 ,如下圖:
使用 ab 模式 執(zhí)行 write 方法
我們先 使用 ab 模式 嘗試將 字符串 通過 write 方法以追加的形式寫入文件
import os.path current_path = os.getcwd() file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'ab') file_test.write('Python 是一種很有意思的編程語言')
終端執(zhí)行效果如下:
由于我們傳入的是 字符串類型 ,無法直接追加寫入文件,那么我們 將字符串轉(zhuǎn)為 byte 類型是否能成功呢?
這又是為何?難道我們使用方法的姿勢不對?其實不然,這里寫入的 byte 類型 我們需要先轉(zhuǎn)為 byte 類型 才可以成功的寫入。示例如下:
此時我們再次執(zhí)行寫入的動作,就可以將其追加寫入文件。
file_test.write(_message) file_test.close()
使用 a 模式 執(zhí)行 writelines 方法
借著上面演示的案例,我們定義一個列表的字符串,然后 通過 open() 函數(shù) 的 a模式,使用 writelines 方法將內(nèi)容寫入文件
import os.path current_path = os.getcwd() file_path = os.path.join(current_path, 'test.txt') file_list = ['\n今天天氣不錯\n', '挺風(fēng)和日麗的\n', '我們下午沒有課\n'] file_test = open(file_path, 'a') file_test.writelines(file_list) file_test.close()
執(zhí)行效果如下圖:
實戰(zhàn)小案例
需求:實現(xiàn)一個可以自動創(chuàng)建 python 包 的函數(shù)
import os def create_package(path): # 定義一個創(chuàng)建 包 的函數(shù) if os.path.exists(path): # 判斷路徑是否存在,若已經(jīng)存在,則拋出異常 raise Exception('%s 已經(jīng)存在,不可創(chuàng)建' % path) else: os.mkdir(path) init_path = os.path.join(path, '__init__.py') file_init = open(init_path, 'w', encoding='utf-8') file_init.write('# coding:utf-8\n') file_init.close() if __name__ == '__main__': current_path = os.getcwd() path = os.path.join(current_path, 'test_package') create_package(path)
執(zhí)行結(jié)果如下:
拓展:從上文腳本中,我們可以發(fā)現(xiàn)每次,執(zhí)行寫入的時候,都要寫入 \n 換行符,很是麻煩,我們可以自定義一個 open 類,從而實現(xiàn)每次我們執(zhí)行寫入操作時的自動換行。
class Open(object): def __init__(self, path, mode='w', is_return=True): # 這里的 is_return 我們定義的是換行的意思,結(jié)合下文的 message 理解 self.path = path self.mode = mode self.is_return = is_return def write(self, message): file_test = open(self.path, mode=self.mode) if self.is_return: # 如果返回 Ture 則 在 message 后,增加換行符 message = '%s\n' % message file_test.write(message) file_test.close() if __name__ == '__main__': current_path = os.getcwd() # path = os.path.join(current_path, 'test_package') open_path = os.path.join(current_path, 'test_new_line.txt') # create_package(path) # create_package(open_path) open_test = Open(open_path) open_test.write('這是一段測試換行符的字符串信息')
執(zhí)行結(jié)果如下:
到此這篇關(guān)于Python學(xué)習(xí)之文件的創(chuàng)建與寫入詳解的文章就介紹到這了,更多相關(guān)Python 文件創(chuàng)建 寫入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm實現(xiàn)在子類中添加一個父類沒有的屬性
這篇文章主要介紹了pycharm實現(xiàn)在子類中添加一個父類沒有的屬性,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python字符串切割:str.split()與re.split()的對比分析
今天小編就為大家分享一篇python字符串切割:str.split()與re.split()的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法
本文主要介紹了python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11python socket通信編程實現(xiàn)文件上傳代碼實例
這篇文章主要介紹了python socket通信編程實現(xiàn)文件上傳代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12Python利用selenium建立代理ip池訪問網(wǎng)站的全過程
selenium控制瀏覽器也是可以使用代理ip的,下面這篇文章主要給大家介紹了關(guān)于Python利用selenium建立代理ip池訪問網(wǎng)站的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03python pandas dataframe 行列選擇,切片操作方法
下面小編就為大家分享一篇python pandas dataframe 行列選擇,切片操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04