詳解Python中的文件操作
一、文件的編碼
1.1 背景
thinking:計算機只能識別:0和1,那么我們豐富的文本文件是如何被計算機識別,并存儲在硬盤中呢?
answer:使用編碼技術(shù)(密碼本)將內(nèi)容翻譯成0和1存入。
編碼技術(shù)即:翻譯的規(guī)則,記錄了如何將內(nèi)容翻譯成二進制,以及如何將二進制翻譯回可識別內(nèi)容。
計算機中有許多可用編碼:
- UTF-8
- GBK
- Big5
- ...
不同的編碼,將內(nèi)容翻譯成二進制也是不同的。
UTF-8是目前全球通用的編碼格式。除非有特殊需求,否則,一律以UTF-8格式進行文件編碼即可。
1.2 總結(jié)

二、文件的讀取
2.1 什么是文件
內(nèi)存中存放的數(shù)據(jù)在計算機關(guān)機后就會消失。要長久保存數(shù)據(jù),就要使用硬盤、光盤、U 盤等設(shè)備。為了便于數(shù)據(jù)的管理和檢索,引入了“文件”的概念。
一篇文章、一段視頻、一個可執(zhí)行程序,都可以被保存為一個文件,并賦予一個文件名。操作系統(tǒng)以文件為單位管理磁盤中的數(shù)據(jù)。一般來說,文件可分為文本文件、視頻文件、音頻文件、圖像文件、可執(zhí)行文件等多種類別。
2.2 文件操作的內(nèi)容
在日常生活中,文件操作主要包括打開、關(guān)閉、讀、寫等操作。
2.3 文件的操作步驟
大概可以分為三個步驟(簡稱文件操作三步走):
①打開文件
②讀寫文件
③關(guān)閉文件
注意:可以只打開和關(guān)閉文件,不進行任何讀寫。
2.3.1 open()打開函數(shù)
在Python,使用open函數(shù),可以打開一個已經(jīng)存在的文件,或者創(chuàng)建一個新文件,語法如下
open(name, mode, encoding)
- name:是要打開的目標文件名的字符串(可以包含文件所在的具體路徑)。
- mode:設(shè)置打開文件的模式(訪問模式):只讀、寫入、追加等。
- encoding:編碼格式(推薦使用UTF-8)
實例代碼:
f = open('python.txt', 'r', encoding='UTF-8')
# encoding的順序不是第三位,所以不能用位置參數(shù),用關(guān)鍵字參數(shù)直接指定注意:此時的'f'是'open'函數(shù)的文件對象,對象是Python中一種特殊的數(shù)據(jù)類型,擁有屬性和方法,可以使用對象.屬性或?qū)ο?方法對其進行訪問,w相當(dāng)于是覆蓋寫入。
mode常用的三種基礎(chǔ)訪問模式

2.3.2 讀操作相關(guān)方法
read()方法:
文件對象.read(num)
num表示要從文件中讀取的數(shù)據(jù)的長度(單位是字節(jié)),如果沒有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。
readlines()方法:
readlines可以按照行的方式把整個文件中的內(nèi)容進行一次性讀取,并且返回的是一個列表,其中每一行的數(shù)據(jù)為一個元素。
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)
# 每一個line臨時變量,就記錄了文件的一行數(shù)據(jù)close():關(guān)閉文件對象
f = open('python.txt', "r")
f.close()
# 最后通過close,關(guān)閉文件對象,也就是關(guān)閉對文件的占用
# 如果不調(diào)用close,同時程序沒有停止運行,那么這個文件將一直被python程序占用。with open語法
with open('python.txt', 'r') as f:
f.readlines()
# 通過在with open的語句塊中對文件進行操作
# 可以在操作完成后自動關(guān)閉close文件,避免遺忘掉close方法2.3.3 操作匯總

2.3.4 總結(jié)

2.3.5 課后練習(xí):單詞計數(shù)

# 通過文件讀取操作,讀取文件word.txt,統(tǒng)計itheima單詞出現(xiàn)的次數(shù)
# 打開文件,以讀取模式打開
# 我的思路
# with open("word.txt") as f:
# contents = f.readlines()
# count = 0
# print(contents)
# for content in contents:
# content.split(" ")
# if content.count("itheima"):
# count += 1
# print(f"itheima出現(xiàn)了{count}次")
# 參考其他方法
f = open("word.txt", "r", encoding="UTF-8")
# 方式2:讀取全部內(nèi)容,通過字符串count統(tǒng)計itheima單詞數(shù)量
# content = f.read()
# count = content.count("itheima")
# print(f"itheima在文件中出現(xiàn)了:{count}次")
# 方式三:讀取內(nèi)容,一行一行讀取
count = 0 # 使用count變量來累計itheima出現(xiàn)的次數(shù)
for line in f:
line = line.strip() # 去除開頭和結(jié)尾的空格以及換行符
words = line.split(" ")
for word in words:
if word == "itheima":
count += 1 # 如果單詞是itheima,進行數(shù)量的累加加1
# 判斷單詞出現(xiàn)次數(shù)并累計
print(f"itheima出現(xiàn)的次數(shù)是:{count}")
# 關(guān)閉文件
f.close()三、文件的寫入
3.1 案例演示
# f.write("Hello world1111!") # 內(nèi)容寫到內(nèi)存中
# flush刷新
# f.flush() # 將內(nèi)存中積攢的內(nèi)容,寫入到硬盤
# close關(guān)閉
# f.close() # close方法,內(nèi)置了flush的功能的
f = open("test.txt", "w", encoding="UTF-8")
# write寫入、flush刷新
f.write("小鮑學(xué)python")
# close關(guān)閉
f.close()注意:
- 直接調(diào)用write,內(nèi)容并為真正寫入文件,而是會積攢在程序的內(nèi)存中,稱之為緩沖區(qū)
- 當(dāng)調(diào)用flush的時候,內(nèi)容才會真正寫入文件
- 這樣做是避免頻繁地操作硬盤,導(dǎo)致效率下降(攢一堆,一次性寫入磁盤)
寫操作注意
- 文件如果不存在,使用”w”模式,會創(chuàng)建新文件
- 文件如果存在,使用”w”模式,會將原有內(nèi)容清空
3.2 總結(jié)

四、文件的追加
4.1 追加寫入操作快速入門
"""
演示文件的追加寫入
"""
# 打開文件,不存在的文件
# f = open("test1.txt", "a", encoding="UTF-8")
# # write寫入
# f.write("小鮑學(xué)python")
# # flush刷新
# f.flush()
# # close關(guān)閉文件
# f.close()
f = open("test1.txt", "a", encoding="UTF-8")
# write寫入,flush刷新
f.write("\n月薪過萬")
# close()關(guān)閉
f.close()注意:
- a模式,文件不存在會創(chuàng)建文件
- a模式,文件存在會在最后,追加寫入文件
4.2 追加操作總結(jié)

五、文件操作綜合案例
5.1 完成文件備份案例
需求分析
需求:有一份賬單文件,記錄了消費收入的具體記錄,內(nèi)容如下:
name,date,money,type,remarks
周杰輪,2022-01-01,100000,消費,正式
周杰輪,2022-01-02,300000,收入,正式
周杰輪,2022-01-03,100000,消費,測試
林俊節(jié),2022-01-01,300000,收入,正式
林俊節(jié),2022-01-02,100000,消費,測試
林俊節(jié),2022-01-03,100000,消費,正式
林俊節(jié),2022-01-04,100000,消費,測試
林俊節(jié),2022-01-05,500000,收入,正式
張學(xué)油,2022-01-01,100000,消費,正式
張學(xué)油,2022-01-02,500000,收入,正式
張學(xué)油,2022-01-03,900000,收入,測試
王力鴻,2022-01-01,500000,消費,正式
王力鴻,2022-01-02,300000,消費,測試
王力鴻,2022-01-03,950000,收入,正式
劉德滑,2022-01-01,300000,消費,測試
劉德滑,2022-01-02,100000,消費,正式
劉德滑,2022-01-03,300000,消費,正式
要求將內(nèi)容復(fù)制并保存為 bill.txt文件

"""
演示文件操作綜合案例:文件備份
"""
# 我的寫法,一開始理解有誤了,題目的要求是測試的數(shù)據(jù)不需要備份到bak文件
# 讀取文件
# f = open("bill.txt", "r", encoding="UTF-8")
# # 將文件寫出到bill.txt.bak文件作為備份
# f_bak = open("bill.txt.bak", "w", encoding="UTF-8")
# flag = True
# for lines in f:
# for line in lines:
# if line == "測" or line == "試":
# flag = False
# if flag:
# f_bak.write(lines)
# flag = True
#
# # 關(guān)閉文件
# f.close()
# f_bak.close()
# 參考寫法
# 打開文件得到文件對象,準備讀取
fr = open("bill.txt", "r", encoding="UTF-8")
# 打開文件得到文件對象,準備寫入
fw = open("bill.txt.bak", "w", encoding="UTF-8")
# for循環(huán)讀取文件
for line in fr:
line = line.strip()
# 判斷內(nèi)容,將滿足的內(nèi)容寫出
if line.split(",")[4] == "測試":
continue
# 將內(nèi)容寫出去
fw.write(line)
# 由于前面對內(nèi)容進行了strip()的操作,所以要手動的寫出換行符
fw.write("\n")
# close2個文件對象
fr.close()
fw.close() # 寫出文件調(diào)用close()會自動flush()以上就是詳解Python中的文件操作 的詳細內(nèi)容,更多關(guān)于Python文件操作 的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令
這篇文章主要給大家介紹了關(guān)于利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令,文中還介紹了用python循環(huán)保存文件并循環(huán)讀取文件的方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
DjangoRestFramework 使用 simpleJWT 登陸認證完整記錄
Djangorestframework-simplejwt是Django REST Framework框架的一個jwt插件,使用 python http 工具進行接口測試的方法文中給大家提到,重點給大家分享djangorestframework-simplejwt 使用記錄及登陸認證的完成過程,感興趣的朋友跟隨小編一起看看吧2021-06-06
Python實現(xiàn)Word圖片提取與批量處理的最佳實踐
在日常工作中,我們經(jīng)常會遇到需要從Word文檔中提取圖片的情況,本文將聚焦于如何利用Spire.Doc for Python這一高效庫,實現(xiàn)Word文檔圖片的批量提取,讓你徹底告別低效的手動操作2025-12-12
使用Python將Exception異常錯誤堆棧信息寫入日志文件
這篇文章主要介紹了使用Python將Exception異常錯誤堆棧信息寫入日志文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python保存大型 .mat 數(shù)據(jù)文件報錯超出 IO 限制的操作
這篇文章主要介紹了python保存大型 .mat 數(shù)據(jù)文件報錯超出 IO 限制的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05

