1. 程式人生 > >[Python]學習基礎篇:文件和目錄

[Python]學習基礎篇:文件和目錄

python中文件的那點事

文件

文件是數據在外部介質上的數據的集合,對於文件在Linux系統上包括普通文件,目錄文件,二進制文件,設備文件等。

  • 文件的打開或者創建
    方法:open(‘file_name’,’打開方式’[,buf_size])
    buf_size:參數指的是文件緩存區的大小,0代表不緩存,1代表緩存,使用系統默認設置的緩存區大小,大於1代表緩存大小。
    打開方式:如下表

打開方式說明
‘r’只讀的方式打開文件,若文件不存在,則產生異常
‘r+’以讀寫的方式方式打開文件,不刪除原內容,若文件不存在,產生異常
‘w’只寫的方式打開文件,刪除原內容,無文件則創建
‘w+’讀寫的方式發開文件,刪除原內容,無文件則創建
‘a’以追加的方式打開一個文件,不刪除原內容,在文件末尾追加數據,無文件則創建
‘a+’以讀寫的方式打開文件,不刪除原內容,在末尾寫數據,無文件則創建
‘rb’同’r’,打開二進制文件
‘rb+’同’r+’,打開二進制文件
‘wb’同’w’,打開二進制文件
‘wb+’同’w+’,打開二進制文件
‘ab’同’a’,打開二進制文件
‘ab+’同’a+’,打開二進制文件

  • 普通文件的讀寫
    讀取
    read([num])
    若num不寫時,讀取整個文件的內容,num>0時讀取num大小字節的數
    readline():讀取文件的一行
    readlines():讀取文件的每一行
    例如:

(1).使用read()
!/bin/python
f=open('file.txtx','r')
s=f.read()
f.close()
print(s)
(2).使用readline讀取一行讀完整個文件
!/bin/python
f=open('file.txtx','r')
whil True:           //讀完整個文件
    s=f.readline()    //讀取一行
    if s=='':
        break
    print s
f.close
(3).使用readlines()讀取文件的每一行,讀完整個文件
!/bin/python
f=open('file.txtx','r')
s=f.readlines()        //讀取後形成一個元組for line in s:
    print line,
f.close()

寫入
write(str)


  • 二進制文件的讀取和寫入
    寫去
    對於二進制文件,是無法將數字,bool類型的數據寫入到二進制文件中。
    (1).使用struct模塊中的pack()方法將數字和bool型轉化為字節串,然後使用write方法寫入到二進制文件中。
    方法:pack(‘格式傳’,格式對象)
    (2).使用pickle模塊中的dump方法直接將對象轉化為字節串並寫入到二進制文件中。
    方法:dump(格式obj,f)
    例如:

(1).使用struct模塊
 !/bin/pythonimport strcut
f=open('file.bit','wb')
n=100w=Truex=392.0
str=struct.pack('if?',b,x,w)
f.write(str)
f.close()
(2).使用pickle模塊
!/bin/pythonimport pickle
f=open('file.bit','wb')
n=100w=Truex=392.0
pickle.dump(n,f)
pickle.dump(w,f)
pickle.dump(x,f)
f.close()

讀取
二進制文件的讀取就是寫入的逆過程
(1).讀取字節串,使用函數將其還原成數據,使用struct模塊中的unpack()方法,返回一個元組
方法:unpack(格式傳,字節表)

!/bin/pythonimport 
structf=open('file.bit','rb')
str=f.read(3)
tu=struct.unpack('if?',str)    //返回一個元組print tu
f.close()

(2).使用pickle模塊中load方法直接讀取並還原成原有數據,返回還原後的對象
方法:load(f)

!/bin/python
import pickle
f=open('file.bit','rb')
n=pickle.load(f)      #讀出文件的數據個數
while i<n:
    x=pickle.load(f)
    print x
    i++
f.close()
  • 文件對象的|常用方法

方法名說明
flush()把緩存區的內容寫入文件
close()把緩存取得內容寫入文件,並關閉文件釋放對象
seek(offset[,whence])文件指針移動
tell()返回文件指針當前位置

  • 常用的文件操作函數

對於文件的操作,python提供了os模塊和os.path模塊的函數
(1).os模塊

函數名說明
access(path)根據mode指定的權限訪問文件
chmod()修改文件的訪問權限
remove(path)刪除path指定的文件
rename(src,dst)重命名
stat(path)返回指定文件的屬性
fstat(path)返回打開文件的所有屬性
listpath(path)返回path目錄下的文件和目錄

(2).os.path模塊

函數名說明
abspath(path)返回path的絕對路徑
dirname(path)返回目錄的路徑
exists(path)文件是否存在
getsize(file_name)返回文件的大小
isabs(path)是否為絕對路徑
isdir(path)是否為目錄
isfile(path)是否為文件
splitext(p)從路徑中分割出擴展名
splitdrive(p)從路徑中分割出驅動器的名稱
walk(path)遍歷目錄數

目錄

  • 目錄的創建
    (1).創建單個目錄
    方法:mkdir(path)
    (2).創建多級目錄
    方法:makedirs(path1/path2/….)

  • 目錄的刪除
    (1).刪除一個目錄
    方法:rmdir(path)
    (2).刪除多級目錄
    方法:removedirs(path1/path2/….)

  • 目錄的遍歷
    對於目錄的遍歷,在上述文件的操作方法中有一個listdir(path)方法,此方法只能列出path目錄下的目錄和文件,但是不能列出子目錄下的文件和目錄。
    (1).使用listdir函數進行遞歸

!/bin/pythonimport osdef dir_view(path):
    list_dir=os.listdir(path)    for dir in list_dir:
        sub_path=os.path.join(path,dir)    #獲取完整路徑
        if os.path.isdir(sub_path):
            dir_view(path)

(2).使用os模塊的walk方法,返回一個元組

!/bin/pythonimport osdef view_dir(path):
    list_dir=os.walk(path)     #返回一個元組,包括3個元素,所有路徑名,所有目錄列表,文件列表
    for root,dirs,files in list_dir:        
        for d in dirs:            
             print os.path.join(root,d)  #獲取完整路徑
        for f ini files:            
           print os.path.join(root,f)   #獲取文件完整路徑

python對於文件的操作比較簡單,不像c那樣比較復雜,對於同一個操作有幾個不同的函數,例如對於文件的打開,C語言中有open函數,fopen函數等。


[Python]學習基礎篇:文件和目錄