Python基礎知識_第10節_檔案操作(IO技術)
Python基礎知識_第10節_檔案操作(IO技術)
檔案操作(IO技術)
文字檔案和二進位制檔案
- 文字檔案:儲存字元的檔案,python預設為unicode解碼,可以用記事本開啟的檔案。word文件不算純文字檔案,因為裡面也可以放圖片。
- 二進位制檔案:無法用記事本開啟,必須用專用的軟體解碼。常見的有MP4視訊檔案、MP3 音訊檔案、JPG 圖片、doc 文件等等。
檔案操作相關模組概述
名稱 | 說明 |
---|---|
io模組 | 檔案流的輸入和輸出操作 input output |
os 模組 | 基本作業系統功能,包括檔案操作 |
glob模組 | 查詢符合特定規則的檔案路徑名 |
fnmatch模組 | 使用模式來匹配檔案路徑名 |
fileinput 模組 | 處理多個輸入檔案 |
filecmp模組 | 用於檔案的比較 |
cvs模組 | 用於 csv檔案處理 |
pickle 和 cPickle | 用於序列化和反序列化 |
xml包 | 用於 XML資料處理 |
bz2、gzip、 zipfile、 zlib、 tarfile | 用於處理壓縮和解壓縮檔案(分別對應不同的演算法) |
建立檔案物件open()
- open(檔名,開啟方式)
- 為了減少“\”的輸入,可以使用原始字串 r “檔名”
- f = open(r"d:\b.txt",“w”)
模式 | 描述 |
---|---|
r | 讀read模式 |
w | 寫write模式。如果檔案不存在則建立;如果檔案存在,則重寫新內容; |
a | 追加append模式。如果檔案不存在則建立;如果檔案存在,則在檔案末尾追加內容 |
b | 二進位制binary模式(可與其他模式組合使用) |
+ | 讀、寫模式(可與其他模式組合使用) |
文字檔案的寫入
基本的檔案寫入操作
- 步驟
- 建立檔案物件
- 寫入資料
- 關閉檔案物件
f = open(r"a.txt","a")
s = "itbaizhan\nsxt\n"
f.write(s)
f.close() # 一定要關閉文件
常用編碼介紹
- 常用UTF-8。
- GB2312、GBK、GB8030都是中文解碼。
中文亂碼問題
- Windows作業系統預設編碼時GBK,Linux作業系統預設的編碼時UTF-8。
- Python預設編碼為Unicode。
- 可以設定encoding為utf-8來使python在通過作業系統os來寫入檔案時,使用utf-8解碼。
f = open(r"b.txt","w",encoding="utf-8")
f.write("尚學堂\n百戰程式設計師\n")
f.close()
write()/writelines()寫入資料
- write(a):把字串a寫入到檔案中
- writelines(b):把字串列表寫入檔案中,需要自己新增換行符。
f = open(r"d:\bb.txt","w",encoding="utf-8")
s = ["高淇\n","高老三\n","高老四\n"]
f.writelines(s)
f.close()
# 高淇
# 高老三
# 高老四
close()關閉檔案流
- 必須要關閉檔案物件。
- 可以結合異常機制finally確保關閉檔案物件。
- 當呼叫close()方法時,首先會把緩衝區資料寫入檔案(也可以直接呼叫flush()方法),再關閉檔案,釋放檔案物件。
try:
f = open(r"my01.txt","a")
str = "gaoqi"
f.write(str)
except BaseException as e:
print(e)
finally:
f.close()
with語句(上下文管理器)
- with自動幫忙還原。通常會使用with語句來讀取檔案。
s = ["高淇\n","高老三\n","高老五\n"]
with open(r"d:\bb.txt","w") as
f: f.writelines(s)
文字檔案的讀取
-
read(size):從檔案中讀取size個字元,並作為結果返回。如果沒有size引數,則讀取整個檔案。讀取到檔案末尾,會返回空字串。
-
readline():讀取一行內容作為結果返回。讀取到檔案末尾,會返回空字串。
-
readlines():文字檔案中,每一行作為一個字串存入列表中,返回該列表。
-
按行讀取一個檔案
# 用Readline方式。
with open(r"bb.txt","r") as f:
while True:
fragment = f.readline()
if fragment: # 如果讀出來的行為空,則break
break
else:
print(fragment,end="")
# 使用迭代器(每次返回一行)讀取文字檔案,更推薦使用。
with open(r"d:\bb.txt","r") as f:
for a in f:
print(a,end="")
使用enumerate()函式和推導式生成列表操作每行增加行號
string.rstrip()去空白符
# 比較有意思,為文字檔案每一行的末尾增加行號。
為文字檔案每一行的末尾增加行號
with open("e.txt","r",encoding="utf-8") as f:
lines = f.readlines()
lines = [ line.rstrip()+" #"+str(index+1)+"\n" for index,line in enumerate(lines)] # enumerate推導式生成列表
# rstrip()去空白符
with open("e.txt","w",encoding="utf-8") as f:
f.writelines(lines)
二進位制檔案的讀取和寫入(圖片檔案拷貝)
- 需要在模式加入“b”:
- f = open(r"d:\a.txt", ‘wb’) #可寫的、重寫模式的二進位制檔案物件
- f = open(r"d:\a.txt", ‘ab’) #可寫的、追加模式的二進位制檔案物件
- f = open(r"d:\a.txt", ‘rb’) #可讀的二進位制檔案物件
# 讀取圖片檔案,實現檔案的拷貝
with open('aa.gif', 'rb') as f:
with open('aa_copy.gif', 'wb') as w:
for line in f.readlines():
w.write(line)
print('圖片拷貝完成!')
檔案物件的常用方法
方法名 | 說明 |
---|---|
read([size]) | 從檔案中讀取size 個位元組或字元的內容返回。若省略[size],則讀取到檔案末尾,即一次讀取檔案所有內容 |
readline() | 從文字檔案中讀取一行內容 |
readlines() | 把文字檔案中每一行都作為獨立的字串物件,並將這些物件放入列表返回 |
write(str) | 將字串 str內容寫入檔案 |
writelines(s) | 將字串列表 s 寫入檔案檔案,不新增換行符 |
seek(offset, whence) | 把檔案指標移動到新的位置,offset表示相對於whence的多少個位元組的偏移量;offset:為正往結束方向移動,為負往開始方向移動。whence:0: 從檔案頭(預設值)1:從當前位置 2:從檔案尾 |
tell() | 返回檔案指標的當前位置 |
truncate([size]) | 只留下指標前 size 個位元組的內容,其餘全部刪除。如果沒有傳入 size,則當指標當前位置到檔案末尾內容全部刪除 |
flush() | 把緩衝區的內容寫入檔案,但不關閉檔案 |
close() | 把緩衝區內容寫入檔案,同時關閉檔案,釋放檔案物件相關資源 |
檔案任意位置操作(seek()移動檔案指標)
# seek()移動檔案指標示例
with open("e.txt","r",encoding="utf-8") as f:
print("檔名是:{0}".format(f.name))
print(f.tell()) # 列印指標位置
print("讀取的內容:{0}".format(str(f.readline())))
print(f.tell())
f.seek(0) # 指標移動到檔案頭
print("讀取的內容:{0}".format(str(f.readline())))
# 檔名時:e.txt
# 0
# 讀取的內容:我love u! #1
#
# 15
# 讀取的內容:尚學堂 #2
#
使用pickle序列化
相關文章
- C# 基礎知識系列- 14 IO篇 檔案的操作C#
- Python基礎知識之檔案的讀取操作Python
- 檔案IO中基礎操作
- Python——基礎知識細節Python
- Python基礎——檔案操作Python
- 資訊處理技術基礎知識(2.4多媒體基礎知識 )--第2章
- Python基礎知識詳解 從入門到精通(六)檔案操作Python
- Pytest 實踐:Python 測試技術基礎知識Python
- IO基礎知識與概念
- [基礎知識] Redis 配置檔案Redis
- Python基礎入門(9)- Python檔案操作Python
- Python技術基礎知識點:OS模組的應用Python
- JAVA檔案操作知識Java
- python 檔案操作的基礎總結Python
- python基礎知識Python
- python 基礎知識Python
- JS基礎細節知識JS
- 檔案IO操作
- OpenStack關鍵技術系列: Libvirt基礎知識
- Python基礎知識1Python
- Python基礎知識整理Python
- Python基礎知識分享Python
- Python入門教程之檔案讀寫操作知識Python
- Python知識體系-Python2基礎知識Python
- 學習下區塊鏈技術基礎知識區塊鏈
- Java 檔案 IO 操作Java
- Linux檔案IO操作Linux
- Java基礎知識回顧之六 —– IO流Java
- Java基礎知識回顧之六 ----- IO流Java
- Python基礎知識之字典Python
- Python基礎知識之集合Python
- Python基礎知識架構Python架構
- Python基礎知識之二Python
- Python基礎知識點梳理Python
- Python - 基礎知識專題 - 配置檔案與日誌管理(正在寫作)Python
- 第10天 | 12天搞定Python,檔案操作(超詳細)Python
- 基礎IO相關操作
- 面試圖譜:前端基礎技術知識講解面試前端