1. 程式人生 > >python檔案IO相關

python檔案IO相關

python對檔案IO的支援很完善,python3更是針對編碼形成了一套更完整的體系。檔案操作主要可以分為檔案操作、目錄操作和其他常用操作三類,以下依次說明,常用方法依舊使用粗體標出。
本文有部分內容轉載自網上。

常用檔案操作方法(注意檔案指標概念)

1.os.mknod(“test.txt”) 建立空檔案
2.fp = open(“test.txt”,w) 直接開啟一個檔案,如果檔案不存在則建立檔案
注意:open函式有一個檔案指標的重要概念,用白話說即目前在檔案的什麼位置執行相關操作,具體在第3條open模式中解釋(此後檔案指標簡稱“指標”)。
3.關於open的模式問題:
r 只能讀。


w 只能寫。覆蓋整個檔案,不存在則建立。
a 只能寫。從檔案底部新增內容,不存在則建立。
解釋:前三種模式只能完成一項操作。r模式最初將指標置於檔案開頭;w模式覆蓋原先檔案內容,最初將指標置於檔案開頭;a模式從檔案末尾追加資料,因此最初將指標置於檔案末尾。
r+ 可讀可寫。不會建立不存在的檔案,從頂部開始寫,會覆蓋之前此位置的內容。
w+ 可讀可寫。如果檔案存在,則覆蓋整個檔案不存在則建立。
a+ 可讀可寫。從檔案頂部讀取內容,從檔案底部新增內容,不存在則建立。
解釋:後三種模式實現了多種功能,在功能上也有一定重合。r+最初將指標置於檔案開頭,在本次write操作後,與我們日常輸入文字的游標相似,指標會移到輸入內容之後(因此這時不能read出之前寫入的內容
)。w+與r+類似,但r+對不存在的檔案會報錯,w+則會建立檔案。a+的指標最初放在檔案末尾。可以使用f.tell()獲得當前指標位置,使用f.seek()修改指標位置。

常用目錄操作方法

1.建立目錄 os.mkdir(“file”)
2.刪除檔案 os.remove(“file”)
3.判斷目錄是否存在 os.path.exists(“dir”)

常用其他操作

1.得到當前工作目錄,即當前Python指令碼工作的目錄路徑: os.getcwd()
2.返回指定目錄下的所有檔案和目錄名:os.listdir()
3.執行shell命令: os.system()
4.建立多級目錄:os.makedirs(r”c:\python\test”)
5.建立單個目錄:os.mkdir(“test”)

檔案綜合操作例項

# -*- coding:utf-8 -*-
import re
import os
import time
#str.split(string)分割字串
#'連線符'.join(list) 將列表組成字串
def change_name(path):
    global i
    if not os.path.isdir(path) and not os.path.isfile(path):
        return False
    if os.path.isfile(path):
        file_path = os.path.split(path) #分割出目錄與檔案
        lists = file_path[1].split('.') #分割出檔案與副檔名
        file_ext = lists[-1] #取出字尾名(列表切片操作)
        img_ext = ['bmp','jpeg','gif','psd','png','jpg']
        if file_ext in img_ext:
            os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
            i+=1 #注意這裡的i是一個陷阱
        #或者
        #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
        #if file_ext in img_ext:
        #    print('ok---'+file_ext)
    elif os.path.isdir(path):
        for x in os.listdir(path):
            change_name(os.path.join(path,x)) #os.path.join()在路徑處理上很有用
img_dir = 'D:\\xx\\xx\\images'
img_dir = img_dir.replace('\\','/')
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print('程式執行耗時:%0.2f'%(c))
print('總共處理了 %s 張圖片'%(i))

其他方法

檔案操作
rb:以二進位制讀模式開啟
wb:以二進位制寫模式開啟
ab:以二進位制追加模式開啟
rb+:以二進位制讀寫模式開啟
wb+:以二進位制讀寫模式開啟
ab+:以二進位制讀寫模式開啟

fp.read([size]):size為讀取的長度,以byte為單位
fp.readline([size]):讀一行,如果定義了size,有可能返回的只是一行的一部分。
fp.readlines([size]):把檔案每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過迴圈呼叫readline()來實現的。如果提供size引數,size是表示讀取內容的總長,也就是說可能只讀到檔案的一部分。
fp.write(str):把str寫到檔案中,write()並不會在str後加上一個換行符。
fp.writelines(seq):把seq的內容全部寫到檔案中(多行一次性寫入)。這個函式也只是忠實地寫入,不會在每行後面加上任何東西。
fp.close():關閉檔案。python會在一個檔案不用後自動關閉檔案,不過這一功能沒有保證,最好還是養成自己關閉的習慣。 如果一個檔案在關閉後還對其進行操作會產生。

目錄操作

1.複製檔案:
shutil.copyfile(“oldfile”,”newfile”) #oldfile和newfile都只能是檔案
shutil.copy(“oldfile”,”newfile”) #oldfile只能是資料夾,newfile可以是檔案,也可以是目標目錄
2.複製資料夾:
3.shutil.copytree(“olddir”,”newdir”) #olddir和newdir都只能是目錄,且newdir必須不存在
4.重新命名檔案(目錄)
os.rename(“oldname”,”newname”) #檔案或目錄都是使用這條命令
5.移動檔案(目錄)
shutil.move(“oldpos”,”newpos”)
6.刪除目錄
os.rmdir(“dir”) #只能刪除空目錄
shutil.rmtree(“dir”) #空目錄、有內容的目錄都可以刪
7.轉換目錄
os.chdir(“path”) #換路徑

其他操作
1.函式用來刪除一個檔案:os.remove()
2.刪除多個目錄:os.removedirs(r”c:\python”)
3.檢驗給出的路徑是否是一個檔案:os.path.isfile()
4.檢驗給出的路徑是否是一個目錄:os.path.isdir()
5.判斷是否是絕對路徑:os.path.isabs()
6.檢驗給出的路徑是否真地存:os.path.exists()
7.返回一個路徑的目錄名和檔名:os.path.split()
8.分離副檔名:os.path.splitext()
9.獲取路徑名:os.path.dirname()
10.獲取檔名:os.path.basename()
11.讀取和設定環境變數:os.getenv() 與os.putenv()
12.給出當前平臺使用的行終止符:os.linesep Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
13.指示你正在使用的平臺:os.name 對於Windows,它是’nt’,而對於Linux/Unix使用者,它是’posix’
14.重新命名:os.rename(old, new)
15.獲取檔案屬性:os.stat(file)
16.修改檔案許可權與時間戳:os.chmod(file)
17.終止當前程序:os.exit()
18.獲取檔案大小:os.path.getsize(filename)