Python學習筆記之檔案操作
阿新 • • 發佈:2022-01-23
檔案操作
1.1 檔案操作的作用
- 檔案讀寫
- 檔案備份
- 把一些內容存放起來,可以讓程式下一次執行的時候直接使用,而不用重新制作一份,省時省力。
1.2 檔案的基本操作
1.2.1 檔案簡單操作體驗
# 開啟檔案
# 第一個引數是檔案路徑,第二個引數是訪問模式
f = open("a.txt", "w")
# 檔案操作
f.write("hello")
# 關閉檔案
f.close()
1.2.2 訪問模式
模 式 | 說明 |
---|---|
r | (以讀的方式)如果檔案不存在,就會報錯。而且不能夠往檔案中寫檔案,預設的訪問方式,檔案指標開頭 |
w | (以寫的方式來)如果檔案不存在,建立檔案。 |
a | (以追加的方式)如果檔案不存在,建立檔案。檔案指標在檔案的結尾的 |
在主訪問模式的帶+,帶b的區別。
-
帶 + 的表示二進位制
-
帶 b 的表示可讀可寫
-
檔案指標對資料的影響
-
r+ 與 w+ 與 a+ 的區別
# 1. r+ 可讀可寫(帶+號)
# 2. 依賴r的特點,如果沒有檔案,會報錯
# FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'
# 3. 根據檔案的指標,檔案指標指向開頭
f = open("a.txt", "r+")
f.close()
# 1. w+可讀可寫(帶+號)
# 2. 依賴w(主訪問模式)的特點,如果沒有檔案,會新建檔案
# 3. 根據檔案的指標,檔案指標指向開頭
# 4. 檔案指向開頭,用新內容覆蓋舊內容
f = open("a.txt", "w+")
f.close()
# 1. a+可讀可寫(帶+號)
# 2. 依賴a(主訪問模式)的特點,如果沒有檔案,會新建檔案
# 3. 根據檔案指標的影響,檔案指標指向末尾
# 4. 但是無法列印讀取到的資料(因為指標指向末尾,他會向右讀資料,而右邊的資料是空的)
f = open("a.txt", "a+")
res = f.read()
print(res)
f.close()
比喻:找一本指定標題筆記本,如果想看的話,沒有找到,就會發狂很難受,如果寫筆記的的話,可以隨便的找一張紙來寫,開啟這個筆記本(開啟檔案),看裡面的內容(r),寫筆記(w、a),關閉筆記,將筆記返回原來的位置(關閉檔案)
1.2.3 檔案讀取
read()
readlines()
readline()
read
f = open("a.txt", "r")
# 不寫引數,表示讀取所有的
# print(f.read())
# 帶引數, 讀取10個字元
# 檔案如果有換行,底層有個\n,佔用了一個字元
print(f.read(10))
f.close()
readlines
f = open("a.txt", "r")
# 檔案物件.readlines()
# 以行為單位,讀取檔案,返回一個列表
con = f.readlines()
print(con)
# ['hello\n', 'world\n', 'java\n', 'hihi']
f.close()
readline
f = open("a.txt", "r")
# 一次讀取一行
res1 = f.readline()
print(res1)
res2 = f.readline()
print(res2)
f.close()
1.2.4 檔案操作seek函式
seek的作用:就是用來移動指標的。
檔案物件.seek(偏移量, 起始位置)
起始位置:
- 0:檔案開頭
- 1: 當前位置
- 2: 檔案結尾
# r 學習目標:
f = open("a.txt", "r+")
# 1. 改變指標檔案位置(讀取部分資料)
f.seek(2, 0)
# 2. 將指標位置放在末尾(讓他讀不出來資料)
f.seek(0, 2)
res = f.read()
print(res)
f.close()
# a 學習目標
f = open("a.txt", "a+")
# 1. 改變指標檔案位置,做到可以讀取資料
f.seek(2, 0)
res = f.read()
print(res)
f.close()
1.3 檔案備份
需求:使用者輸入當前檔案的檔名,程式對該檔名進行備份
(備份檔名為:xx[備份].字尾)
1.3.1 檔案備份步驟
- 接收使用者的輸入的檔名
- 規範備份檔名
- 備份檔案寫入資料
old_name = input("請輸入當前目錄的檔名:")
# 獲取使用者輸入的資訊
# print(old_name)
# 獲取 最後一個以.結尾的索引
index = old_name.rfind(".")
# 獲得字首
qianzui = old_name[:index]
# 獲得字尾
houzui = old_name[index:]
# 通過拼接修改備份的檔名
new_name = qianzui + "【備份】" + houzui
# print(new_name)
# 操作原來的檔案 和 備份的檔案
old_f = open(old_name, "rb")
new_f = open(new_name, "wb")
# 將讀到的檔案寫入到備份的檔案
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
pass
print("備份檔案成功")
1.3.2 檔案備份的好處
對檔案內容進行保護
1.4 檔案和資料夾的操作
檔案操作
- 匯入os模組
import os
- 檔案重新命名
os.rename(old_dir_name, new_dir_name)
- 檔案刪除
os.remove(dir)
資料夾操作
- 建立資料夾
os.mkdir(資料夾名字)
- 刪除資料夾
os.rmdir(資料夾名字)
- 獲取當前檔案所在檔案目錄
os.getcwd()
- 改變預設目錄
os.chdir(目錄)
- 獲取目錄列表
os.listdir()
- 資料夾重新命名
os.rename(old_dir_name, new_dir_name)
1.5 應用案例
需求:把xx資料夾下的所有檔案重新命名為python_xx(新增字串)
把xx資料夾下面的python_xx檔案重新命名為xx檔案(刪除字串)
import os
# 做一個flag = 1,新增指定字串的檔名, flag = 2, 刪除指定字串的檔名
flag = 2
# 獲得當前目錄下的所有檔案
list_file = os.listdir()
for item in list_file:
if flag == 1:
new_name = "python_" + item
if flag == 2:
index = len("python_")
new_name = item[index:]
os.rename(item, new_name)