1. 程式人生 > 其它 >Python學習筆記之檔案操作

Python學習筆記之檔案操作

檔案操作

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)