日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Python學習之文件的創(chuàng)建與寫入詳解_python

作者:渴望力量的哈士奇 ? 更新時間: 2022-05-25 編程語言

在前面章節(jié)我們通過 os包學習了如何創(chuàng)建、讀取一個文件夾,但是并沒有學習如何創(chuàng)建、讀寫一個文件,接下來我們就學習關(guān)于文件的處理。當我們學習完文件處理之后,就可以隨意讀寫文件。

內(nèi)置函數(shù) - open 獲取文件對象

open() 函數(shù)

open()函數(shù)是是python的讀寫文件的基本函數(shù),它可以生成文件對象可以創(chuàng)建,也可以操作文件的讀寫。

用法:

open(path, mode)

參數(shù)說明:

path:文件路徑

mode:操作模式;比如讀文件的模式,寫文件的模式。下文有詳細介紹

返回值:

文件對象

示例用法如下:

file = open('d://test.txt', 'w')

# >>> 代碼釋義:使用 open() 函數(shù) 對 D 磁盤下的 'test.txt' 文件執(zhí)行寫入的操作 ( w 為寫入的操作 ) 并賦值給變量 file

利用文件對象進行創(chuàng)建與寫入

文件操作的寫入模式

模式 介紹
w 創(chuàng)建文件(w為寫入的操作,當文件不存在時,則會創(chuàng)建文件;已創(chuàng)建文件,則內(nèi)容會被覆蓋)
w+ 創(chuàng)建文件并讀取文件
wb 二進制形式創(chuàng)建文件(與?w?的功能相同,只不過 web 的寫入類型為 byte )
wb+ 二進制形式創(chuàng)建或追加內(nèi)容(如果文件存在不會覆蓋原本的內(nèi)容,而是以 byte 類型進行追加)
a 在文件中追加內(nèi)容,如果沒有該文件則會創(chuàng)建文件
a+ 讀寫模式追加(同樣是追加內(nèi)容,只不過賦予了讀取的功能)
ab+ 二進制形式讀寫追加(可以追加并讀取 byte 類型的模式)

文件對象的寫入操作方法

方法名 參數(shù) 介紹 舉例
write Message(字符串) 寫入信息
如果是帶有b的模式,則會變?yōu)?byte 類型
f.write(‘hello\n’)
writelines Message_list(列表) 批量寫入
列表內(nèi)須是字符串,按照索引位置依次寫入;
若為b的模式,同上
f.writelines([‘a(chǎn)\n’, ‘b\n’])
close 關(guān)閉并保存文件 f.close()

注意:操作文件完成后,必須使用 close 方法!!!不然可能會造成內(nèi)存占用,如果反復生成文件對象進行寫入操作,可能會造成內(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', '挺風和日麗的\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é)果如下:

原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123675274

欄目分類
最近更新