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

學(xué)無(wú)先后,達(dá)者為師

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

一文帶你搞懂Python中的文件操作_python

作者:玲小叮當(dāng) ? 更新時(shí)間: 2022-12-23 編程語(yǔ)言

一、文件的編碼

計(jì)算機(jī)中有許多可用編碼:

  • UTF-8
  • GBK
  • Big5

UTF-8是目前全球通用的編碼格式

除非有特殊需求,否則,一律以UTF-8格式進(jìn)行文件編碼即可。

二、文件的讀取

2.1 open()打開(kāi)函數(shù)

注意:此時(shí)的fopen函數(shù)的文件對(duì)象,對(duì)象是Python中一種特殊的數(shù)據(jù)類(lèi)型,擁有屬性和方法,可以使用對(duì)象.屬性或?qū)ο?方法對(duì)其進(jìn)行訪問(wèn),后續(xù)面向?qū)ο笳n程會(huì)給大家進(jìn)行詳細(xì)的介紹。

name:是要打開(kāi)的目標(biāo)文件名的字符串(可以包含文件所在的具體路徑)。

mode:設(shè)置打開(kāi)文件的模式(訪問(wèn)模式):只讀、寫(xiě)入、追加等。

encoding:編碼格式(推薦使用UTF-8)

open(name, mode, encoding)

例子:

f = open('./test.txt', 'r', encoding='utf-8')

2.2 mode常用的三種基礎(chǔ)訪問(wèn)模式

模式 描述
f 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
w 打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,原有內(nèi)容會(huì)被刪除 。如果該文件不存在,創(chuàng)建新文件。
a 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。
如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。

2.3 讀操作相關(guān)方法

操作匯總

操作 功能
文件對(duì)象 = open(file, mode, encoding) 打開(kāi)文件獲得文件對(duì)象
文件對(duì)象.read(num) 讀取指定長(zhǎng)度字節(jié)<br/>不指定num讀取文件全部
文件對(duì)象.readline() 讀取一行
文件對(duì)象.readlines() 讀取全部行,得到列表
for line in 文件對(duì)象 for循環(huán)文件行,一次循環(huán)得到一行數(shù)據(jù)
文件對(duì)象.close() 關(guān)閉文件對(duì)象
with open() as f 通過(guò)with open語(yǔ)法打開(kāi)文件,可以自動(dòng)關(guān)閉

2.3.1 read()方法:

num表示要從文件中讀取的數(shù)據(jù)的長(zhǎng)度(單位是字節(jié)),如果沒(méi)有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。

文件對(duì)象.read(num)

2.3.2 readlines()方法

readlines可以按照行的方式把整個(gè)文件中的內(nèi)容進(jìn)行一次性讀取,并且返回的是一個(gè)列表,其中每一行的數(shù)據(jù)為一個(gè)元素。

f = open('python.txt')
content = f.readlines()

# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)

# 關(guān)閉文件
f.close()

例:

readline()方法:一次讀取一行內(nèi)容

f = open('python.txt')

content = f.readline()
print(f'第一行:{content}')

content = f.readline()
print(f'第二行:{content}')

# 關(guān)閉文件
f.close()

for循環(huán)讀取文件行:

for line in open("python.txt", "r"):
    print(line)

# 每一個(gè)line臨時(shí)變量,就記錄了文件的一行數(shù)據(jù)

2.3.3 close() 關(guān)閉文件對(duì)象

f = open("python.txt", "r")

f.close()

# 最后通過(guò)close,關(guān)閉文件對(duì)象,也就是關(guān)閉對(duì)文件的占用
# 如果不調(diào)用close,同時(shí)程序沒(méi)有停止運(yùn)行,那么這個(gè)文件將一直被Python程序占用。

2.3.4 with open 語(yǔ)法

with open("python.txt", "r") as f:
    f.readlines()

# 通過(guò)在with open的語(yǔ)句塊中對(duì)文件進(jìn)行操作
# 可以在操作完成后自動(dòng)關(guān)閉close文件,避免遺忘掉close方法

案例:通過(guò)文件讀取操作,讀取此文件,統(tǒng)計(jì)itheima單詞出現(xiàn)的次數(shù)

itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima

index = 0
with open('./test.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        # print(line)
        str = line.split(' ')
        print(str)
        for val in str:
            if val == 'it':
                index += 1

print(f'index:{index}')

三、文件的寫(xiě)入

寫(xiě)操作快速入門(mén)

注意:

直接調(diào)用write,內(nèi)容并未真正寫(xiě)入文件,而是會(huì)積攢在程序的內(nèi)存中,稱之為緩沖區(qū)

  • 當(dāng)調(diào)用flush的時(shí)候,內(nèi)容會(huì)真正寫(xiě)入文件
  • 這樣做是避免頻繁的操作硬盤(pán),導(dǎo)致效率下降(攢一堆,一次性寫(xiě)磁盤(pán))
  • 文件如果不存在,使用”w”模式,會(huì)創(chuàng)建新文件
  • 文件如果存在,使用”w”模式,會(huì)將原有內(nèi)容清空

例:

# 1. 打開(kāi)文件
f = open('python.txt', 'w')

# 2.文件寫(xiě)入
f.write('hello world')

# 3. 內(nèi)容刷新
f.flush()

四、文件的追加

追加寫(xiě)入操作快速入門(mén)

注意:

  • a模式,文件不存在會(huì)創(chuàng)建文件
  • a模式,文件存在會(huì)在最后,追加寫(xiě)入文件

案例演示:

# 1. 打開(kāi)文件,通過(guò)a模式打開(kāi)即可
f = open('python.txt', 'a')

# 2.文件寫(xiě)入
f.write('hello world')

# 3. 內(nèi)容刷新
f.flush()

五、文件操作綜合案例

完成文件備份案例:

bill.txt

name,date,money,type,remarks
周杰輪,2022-01-01,100000,消費(fèi),正式
周杰輪,2022-01-02,300000,收入,正式
周杰輪,2022-01-03,100000,消費(fèi),測(cè)試
林俊節(jié),2022-01-01,300000,收入,正式
林俊節(jié),2022-01-02,100000,消費(fèi),測(cè)試
林俊節(jié),2022-01-03,100000,消費(fèi),正式
林俊節(jié),2022-01-04,100000,消費(fèi),測(cè)試
林俊節(jié),2022-01-05,500000,收入,正式
張學(xué)油,2022-01-01,100000,消費(fèi),正式
張學(xué)油,2022-01-02,500000,收入,正式
張學(xué)油,2022-01-03,900000,收入,測(cè)試
王力鴻,2022-01-01,500000,消費(fèi),正式
王力鴻,2022-01-02,300000,消費(fèi),測(cè)試
王力鴻,2022-01-03,950000,收入,正式
劉德滑,2022-01-01,300000,消費(fèi),測(cè)試
劉德滑,2022-01-02,100000,消費(fèi),正式
劉德滑,2022-01-03,300000,消費(fèi),正式
f2 = open('bill.txt.bak', 'a', encoding="utf-8")
with open('bill', 'r', encoding="UTF-8") as f:
    for line in f:
        line = line.strip()
        str = line.split(',')
        if str[4] == '測(cè)試':
            continue
        else:
            f2.write(f'{line}\n')

f2.close()

原文鏈接:https://segmentfault.com/a/1190000042869535

欄目分類(lèi)
最近更新