詳解Python中的文件操作
一、文件的編碼
1.1 背景
thinking:計算機(jī)只能識別:0和1,那么我們豐富的文本文件是如何被計算機(jī)識別,并存儲在硬盤中呢?
answer:使用編碼技術(shù)(密碼本)將內(nèi)容翻譯成0和1存入。
編碼技術(shù)即:翻譯的規(guī)則,記錄了如何將內(nèi)容翻譯成二進(jìn)制,以及如何將二進(jìn)制翻譯回可識別內(nèi)容。
計算機(jī)中有許多可用編碼:
- UTF-8
- GBK
- Big5
- ...
不同的編碼,將內(nèi)容翻譯成二進(jìn)制也是不同的。
UTF-8是目前全球通用的編碼格式。除非有特殊需求,否則,一律以UTF-8格式進(jìn)行文件編碼即可。
1.2 總結(jié)
二、文件的讀取
2.1 什么是文件
內(nèi)存中存放的數(shù)據(jù)在計算機(jī)關(guān)機(jī)后就會消失。要長久保存數(shù)據(jù),就要使用硬盤、光盤、U 盤等設(shè)備。為了便于數(shù)據(jù)的管理和檢索,引入了“文件”的概念。
一篇文章、一段視頻、一個可執(zhí)行程序,都可以被保存為一個文件,并賦予一個文件名。操作系統(tǒng)以文件為單位管理磁盤中的數(shù)據(jù)。一般來說,文件可分為文本文件、視頻文件、音頻文件、圖像文件、可執(zhí)行文件等多種類別。
2.2 文件操作的內(nèi)容
在日常生活中,文件操作主要包括打開、關(guān)閉、讀、寫等操作。
2.3 文件的操作步驟
大概可以分為三個步驟(簡稱文件操作三步走):
①打開文件
②讀寫文件
③關(guān)閉文件
注意
:可以只打開和關(guān)閉文件,不進(jìn)行任何讀寫。
2.3.1 open()打開函數(shù)
在Python,使用open函數(shù),可以打開一個已經(jīng)存在的文件,或者創(chuàng)建一個新文件,語法如下
open(name, mode, encoding)
- name:是要打開的目標(biāo)文件名的字符串(可以包含文件所在的具體路徑)。
- 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ū)ο?方法對其進(jìn)行訪問,w相當(dāng)于是覆蓋寫入。
mode常用的三種基礎(chǔ)訪問模式
2.3.2 讀操作相關(guān)方法
read()方法:
文件對象.read(num)
num表示要從文件中讀取的數(shù)據(jù)的長度(單位是字節(jié)),如果沒有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。
readlines()方法:
readlines可以按照行的方式把整個文件中的內(nèi)容進(jìn)行一次性讀取,并且返回的是一個列表,其中每一行的數(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,同時程序沒有停止運(yùn)行,那么這個文件將一直被python程序占用。
with open語法
with open('python.txt', 'r') as f: f.readlines() # 通過在with open的語句塊中對文件進(jìn)行操作 # 可以在操作完成后自動關(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)了{(lá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,進(jìn)行數(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 完成文件備份案例
需求分析
需求:有一份賬單文件,記錄了消費(fèi)收入的具體記錄,內(nèi)容如下:
name,date,money,type,remarks
周杰輪,2022-01-01,100000,消費(fèi),正式
周杰輪,2022-01-02,300000,收入,正式
周杰輪,2022-01-03,100000,消費(fèi),測試
林俊節(jié),2022-01-01,300000,收入,正式
林俊節(jié),2022-01-02,100000,消費(fèi),測試
林俊節(jié),2022-01-03,100000,消費(fèi),正式
林俊節(jié),2022-01-04,100000,消費(fèi),測試
林俊節(jié),2022-01-05,500000,收入,正式
張學(xué)油,2022-01-01,100000,消費(fèi),正式
張學(xué)油,2022-01-02,500000,收入,正式
張學(xué)油,2022-01-03,900000,收入,測試
王力鴻,2022-01-01,500000,消費(fèi),正式
王力鴻,2022-01-02,300000,消費(fèi),測試
王力鴻,2022-01-03,950000,收入,正式
劉德滑,2022-01-01,300000,消費(fèi),測試
劉德滑,2022-01-02,100000,消費(fèi),正式
劉德滑,2022-01-03,300000,消費(fèi),正式
要求將內(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() # 參考寫法 # 打開文件得到文件對象,準(zhǔn)備讀取 fr = open("bill.txt", "r", encoding="UTF-8") # 打開文件得到文件對象,準(zhǔn)備寫入 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)容進(jìn)行了strip()的操作,所以要手動的寫出換行符 fw.write("\n") # close2個文件對象 fr.close() fw.close() # 寫出文件調(diào)用close()會自動flush()
以上就是詳解Python中的文件操作 的詳細(xì)內(nèi)容,更多關(guān)于Python文件操作 的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用 Python 讀取電子表格中的數(shù)據(jù)實例詳解
這篇文章主要介紹了使用 Python 讀取電子表格中的數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04python打包exe文件并隱藏執(zhí)行CMD命令窗口問題
這篇文章主要介紹了python打包exe文件并隱藏執(zhí)行CMD命令窗口問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01使用Django開發(fā)簡單接口實現(xiàn)文章增刪改查
這篇文章主要介紹了使用Django開發(fā)簡單接口實現(xiàn)文章增刪改查,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05解決PyCharm不在run輸出運(yùn)行結(jié)果而不是再Console里輸出的問題
這篇文章主要介紹了解決PyCharm不在run輸出運(yùn)行結(jié)果而不是再Console里輸出的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09將pytorch的網(wǎng)絡(luò)等轉(zhuǎn)移到cuda
這篇文章主要介紹了將pytorch的網(wǎng)絡(luò)等轉(zhuǎn)移到cuda的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06在Python中操作字符串之startswith()方法的使用
這篇文章主要介紹了在Python中操作字符串之startswith()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05python?中?lxml?的?etree?標(biāo)簽解析
這篇文章主要介紹了python?中l(wèi)xml的etree?標(biāo)簽解析,文章圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)或工作有所幫助2022-04-04