python文件處理

在python中,文件其實就是對象。經過open()函數,打開文件,文件的屬性包括讀文件,寫文件,關閉文件等.python

1.python文件打開方式緩存

1.1文件打開方法ssh

open(name[,access_mode='r'[,buffering=-1]])函數

name:文件路徑編碼

access_mode:打開方式,可選選項,默認以只讀的方式打開。下方會詳細介紹幾種模式的區別。spa

buffering:用於指示訪問文件所採用的緩衝方式,可選選項,默認是使用系統默認緩衝機制。其中0表示不緩衝。1表示只緩衝一行數據,任何大於1的值表明使用給定值做爲緩衝區大小。不提供該參數或者給定負值表明使用系統默認緩衝機制。指針

 

1.2關於access_mode幾種方式orm

'r':只讀方式打開。文件必須存在;不支持寫,當文件寫入數據時會報錯。對象

'w':只寫方式打開。文件不存在建立文件;文件存在則清空文件內容,採用write可從新寫入數據。不支持讀,當讀文件數據時會報錯。rem

'a':追加方式打開。文件不存在建立文件;文件存在則保留文件內容,採用write可在文件末行追加寫入數據。不支持讀,當讀文件數據時會報錯。

'r+':讀寫方式打開。文件必須存在;保留文件內容,支持寫,採用write可在文件首行處寫入數據,並覆蓋相對應位置的原數據。

'w+':讀寫方式打開。文件不存在建立文件;文件存在則清空文件內容,採用write可從新寫入數據。支持讀。

'a+':以追加方式及讀寫方式打開。文件不存在建立文件;文件存在則保留文件內容,採用write可在文件末行追加寫入數據。支持讀。

'rb','wb','ab','rb+','wb+','ab+':以二進制方式打開文件,其餘的和上面同樣。

說明:

1.支持讀,表示可使用文件屬性read,readline,readlines

2.支持寫,表示可使用文件屬性write,writelines

3.'w'方式的寫,是清空文件全部內容,從新寫入數據。

4.'a'方式的寫,不清空文件內容,在文件末尾追加的寫入數據。

5.'r+'方式的寫,不清空文件內容,在文件首行處寫入數據,並覆蓋相對應位置的原數據。

舉例:

好比說原文件內容爲:

abc

efg

當寫入數據write('xz')

若是以'w'方式打開文件並寫入數據,則文件內容變爲:

xz

若是以'a'方式打開文件並寫入數據,則文件內容變爲:

abc

efg

xz

若是以'r+'方式打開文件並寫入數據,則文件內容變爲:

xzc

efg

 

關於'r':

>>> import os
>>> os.getcwd()                                 #查看python解釋器當前路徑
'/home/autotest'
>>> os.listdir('/home/autotest')           #查看python解釋器當前路徑下有哪些文件,目前只存在hello.py文件
['hello.py']

#文件必須存在,不存在會報錯。 

>>> f=open('hello1.py','r+')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'hello1.py'

#文件支持只讀read();不支持寫write(),寫時報錯。

>>> f=open('hello.py')
>>> f.read()
"#!/usr/bin/env python\nprint 'hello world'\n"
>>> f.write('test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for writing

 

關於'w':

>>> import os
>>> os.getcwd()                                 #查看python解釋器當前路徑
'/home/autotest'
>>> os.listdir('/home/autotest')           #查看python解釋器當前路徑下有哪些文件,目前只存在hello.py文件
['hello.py']

#當文件不存在,可建立文件。

>>> fw=open('hello1.py','w')               
>>> os.listdir('/home/autotest')
['hello.py', 'hello1.py']

#文件支持只寫write();不支持讀read(),讀時報錯。
>>> fw.write('print w')
>>> fw.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for reading

 

其餘幾種方式就暫不舉例了,你們能夠自行地在python解釋器上試試看,多動手就會明白了。

 

2.文件的屬性

2.1查看文件屬性

>>> f=open("hello.py")   #默認以只讀的方式打開
>>> dir(f)                      #查看文件屬性
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

 

2.2文件讀取屬性

read([size]):讀取文件,讀取size個字節。默認讀取所有。

readline([size]):讀取一行,讀取一行中的size個字節。默認讀取一行。

例,若是一行中有10個字節,若是size小於10,則readline(2)則讀取前兩字節,再readline(2)則讀取剩餘字節的前兩個字節,再readline()則讀取剩餘的六個字節。若是size大於等於10,則讀取一整行。

readlines([size]):讀取完文件(最可能是緩衝區DEFAULT_BUFFER_SIZE的字節數),返回每一行所組成的列表(由字符串組成的列表)。

這個size指的是緩衝器的大小,若是給的值爲1或者其餘數值,文件最多返回8192個字節。

>>> import io

>>> print io.DEFAULT_BUFFER_SIZE
8192

 

2.3文件寫屬性

write(str):將字符串寫入文件

writelines(sequence_of_strings):寫多行到文件:sequence_of_strings由字符串組成的序列(元組或列表)。

說明:

1.寫文件過程,在python解釋器寫入數據時,先寫到緩衝區,若是不使用close()或者flush(),是不會寫入磁盤,文件修改是不生效的。主動調用close()或者flush(),寫緩存同步到磁盤。若是寫入數據了大於或者等於寫緩存,寫緩存同步到磁盤。

>>> f=open('hello1.py','w+')
>>> f.write('hello1')
>>> f.flush()
>>> f.tell()
6
>>> f.seek(0,os.SEEK_SET)
>>> f.tell()
0
>>> f.read()
'hello1'
>>> f.close()

2.寫入文件後,必須打開才能讀取寫入的內容。

3.讀取文件後,沒法從新再次讀取已經讀取過的內容。緣由是,文件指針已指向末尾,若是想從新讀取內容,須要將文件指針指向開頭。

>>> f=open('hello1.py','a+')
>>> f.tell()
0
>>> f.read()                       #第一次讀取可讀取文本內容。
'hello1'
>>> f.tell()
6
>>> f.read()                        #再次讀取則沒法從新獲取內容。緣由是,文件指針已指向末尾。
''
>>> f.seek(0,os.SEEK_SET)  #文件指針指向開頭,則能夠從新讀取內容。
>>> f.tell()
0
>>> f.read()
'hello1'
>>> f.close()

 

2.4關閉文件屬性

close():要養成良好習慣,使用open打開文件後,讀取文件以後,當再也不使用該文件,記得必定要關閉文件哦。由於close()後,數據纔會真正的將寫緩存同步到磁盤,纔會修改文件成功。而且,若是打開文件數到了系統限制,再打開文件就會失敗。

 

2.5其餘屬性

flush():直接把內部緩衝區中的數據馬上寫入文件。

tell():返回當前文件指針位置

seek(偏移量[,相對位置]):移動文件指針位置,偏移量可正可負。相對位置能夠導入os模塊:os.SEEK_SET:相對文件起始位置;os.SEEK_CUR:相對文件當前位置;os.SEEK_END相對文件結尾位置。

fileno():文件描述符

mode:文件打開權限

encoding:文件編碼格式

closed:文件是否關閉。值爲False,表示文件未關閉。

 

3.使用os模塊處理文件

3.1使用OS模塊打開文件

os.open(filename,flag[,mode]):打開文件,返回文件描述符

flag:打開文件方式

os.O_CREAT:建立文件

os.O_RDONLY:只讀方式打開

os.O_WRONLY:只寫方式打開

os.O_RDWR:讀寫方式打開

 

3.2使用os模塊對文件進行操做

os.read(fd,buffersize):讀取文件,fd爲文件描述符

os.write(fd,string):寫入文件

os.lseek(fd,pos,how):文件指針操做,pos是偏移量,how是相對位置:os.SEEK_SET:相對文件起始位置;os.SEEK_CUR:相對文件當前位置;os.SEEK_END相對文件結尾位置。

os.close(fd):關閉文件

 

3.3os模塊方法介紹

os.access(path,mode):判斷該文件權限:mode:os.F_OK:文件是否存在,os.R_OK:是否有讀權限,os.W_OK是否有寫權限,os.X_OK是否有可執行權限。

os.listdir(path):返回當前目錄下全部文件

os.remove(path):刪除文件

os.rename(old,new):修改文件或者目錄名

os.mkdir(path [,mode]):建立目錄

os.makedirs(path [,mode]):建立多級目錄

os.removedirs(path):刪除多級目錄

os.rmdir(path):刪除目錄(目錄必須爲空)

 

3.4os.path模塊方法介紹

os.path.exists(path):當前路徑是否存在

os.path.isdir(s):是不是一個目錄

os.path.isfile(path):是不是一個文件

os.path.getsize(filename):返回文件大小

os.path.dirname(p):返回路徑的目錄

os.path.basename(p):返回路徑的文件名

os.path.getmtime(path):文件或文件夾的最後修改時間

os.path.join(path1,path2,...):將path進行組合,若其中有絕對路徑,則以前的path將被刪除

舉例說明:

>>> import os
>>> os.getcwd()
'/home/autotest'
>>> os.listdir('/home/autotest')
['hello.py', 'hello1.py', 'hello3.py', 'hello2.py', 'email126pro']
>>> os.path.exists('/home/autotest/hello.py')
True
>>> os.path.exists('hello.py')
True
>>> os.path.exists('/home/autotest/')
True

>>> os.path.isfile('/home/autotest/hello.py')
True
>>> os.path.isfile('hello.py')
True
>>> os.path.isdir('/home/autotest/')
True
>>> os.path.getsize('/home/autotest/hello.py')
42
>>> os.path.getsize('hello.py')
42
>>> os.path.getsize('hello11.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/genericpath.py", line 49, in getsize
return os.stat(filename).st_size
OSError: [Errno 2] No such file or directory: 'hello11.py'
>>> os.path.dirname('hello.py')
''
>>> os.path.dirname('/home/autotest/hello.py')
'/home/autotest'

>>> os.path.dirname('/home/autotest/')'/home/autotest'>>> os.path.dirname('/home/autotest')'/home'>>> os.path.basename('hello.py')'hello.py'>>> os.path.basename('/home/autotest/hello.py')'hello.py'>>> os.path.basename('/home/autotest/')''>>> os.path.getmtime('/home/autotest/hello.py')1479450484.9321721>>> os.path.join('/home/autotest','hello.py')'/home/autotest/hello.py'

相關文章
相關標籤/搜索