Python模塊File文件操作


Python模塊File簡介

Python提供了File模塊進行文件的操作,他是Python的內置模塊。我們在使用File模塊的時候,必須先用Popen()函數打開一個文件,在使用結束需要close關閉文件。

常用函數

序號

方法

描述

1

file.close()

關閉文件。關閉后文件不能再進行讀寫操作。

2

file.flush()

刷新文件內部緩沖,直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待輸出緩沖區寫入。

3

file.fileno()

返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上。

4

file.isatty()

如果文件連接到一個終端設備返回 True,否則返回 False。

5

file.next()

返回文件下一行。

6

file.read([size])

從文件讀取指定的字節數,如果未給定或為負則讀取所有。

7

file.readline([size])

讀取整行,包括 “\n” 字符。

8

file.readlines([sizehint])

讀取所有行並返回列表,若給定sizeint>0,返回總和大約為sizeint字節的行, 實際讀取值可能比sizhint較大, 因為需要填充緩沖區。

9

file.seek(offset[, whence])

設置文件當前位置

10

file.tell()

返回文件當前位置。

11

file.truncate([size])

截取文件,截取的字節通過size指定,默認為當前文件位置。

12

file.write(str)

將字符串寫入文件,沒有返回值。

13

file.writelines(sequence)

向文件寫入一個序列字符串列表,如果需要換行則要自己加入每行的換行符。

File模塊使用實例

1.打開和關閉文件

  • open()
  • close()

有兩種內建函數可以獲取文件對象:open和file。他們的用法完全一樣。下面只以open()為例子講解。獲取一個文件對象(打開文件)的語法如下:

 1 fileObj = open(filename,access_mode='r',buffering=-1) 

 filename不用說你也應該知道是你要打開文件的路徑。
access_mode用來標識文件打開的模式,默認為r(只讀)。
常用的模式如下表所示:

 

文件模式

解釋

r

以只讀方式打開

w

以寫方式打開,文件不為空時清空文件;文件不存在時新建文件。

a

追加模式,沒有則創建

r+,w+,a+

以讀寫模式打開,參見w,a 另外還有一個b表示二進制模式訪問,但是對於Linux或者unix系統來說這個模式沒有任何意義,因為他們把所有文件都看作二進制文件,包括文本文件。

第三個參數不經常用到,標識訪問文件的緩沖方式,0代表不緩沖,1代表緩

沖一行,-1代表使用系統默認緩沖方式。只要使用系統默認就好。

一些例子:

1 f = open('/etc/passwd','r')
2 f1 = open('/etc/test','w')

 1 f.close() 

2.文件讀取

file.read(size = -1)

讀取從當前文件游標起size個字節的文件內容。如果size=-1,則讀取所有剩余字節。

1 >>> f = open('/etc/passwd')
2 >>> f.read(100)
3 'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol'

file.readlines(size=-1)

從文件中讀取並返回一行(包括行結束符),或返回最大size個字符

 1>>> f.readline() 

‘ogin\n’#和上面一個例子輸出的最后拼起來就是 ‘nologin’,因為游標在l后面。

 1 >>> f.readline(1)

2 'a' 

file.readlines(sizhint=0)

讀取文件所有的行,並作為一個列表返回(包括行結束符),如果sizhint>0則返回總和大約sizhint字節的行(具體由緩沖區大小決定)。

1 f.readlines()
2 ['dm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n', 'sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', ......

輸出省略。

3.文件寫入

file.write(str)

向文件中寫入指定的字符串。

1 >>> f = file('/root/test.py','w+')
2 >>> f.write("print 'hello,world'")
3 >>> f.read()
4 ''
5 >>> f.close()
6 >>> file('/root/test.py','r').read()
7 "print 'hello,world'"

file.write(seq)

向文件寫入字符串序列seq。seq是任何返回字符串的可迭代對象。

1 >>> f = file('/root/test.py','a+')
2 >>> codelst = ['\n','import os\n',"os.popen('ls').read()\n"]
3 >>> f.writelines(codelst)
4 >>> f.close()
5 >>> file('/root/test.py','r').read()
6 "print 'hello,world'\nimport os\nos.popen('ls').read()\n"

注意,文件寫入的時候,不會自動加上換行符,必須手動加上。

4.文件移動

學過C語言的同學,一定對fseek()函數不陌生,在Python中,seek()方法是fseek()的替代者。

seek(offset,whence=0)

方法可以將文件游標移動到文件的任意位置。其中offset代表需要移動的偏移字節數,whence表示要從哪個位置開始偏移:

0代表從文件開頭開始算起,

1代表從當前位置開始算起,

2代表從文件末尾算起。

那我們如何知道當前文件游標在哪里呢?別擔心,這里有個tell()方法可以返回當前文件游標的位置。

 1 >>> f = file('test.py','r')
 2 >>> f.tell() #文件開頭
 3 0
 4 >>> f.seek(5)#從默認的文件頭開始移動5個字節
 5 >>> f.tell()
 6 5
 7 >>> f.seek(5,1)#從當前游標處移動5個字節
 8 >>> f.tell()
 9 10
10 >>> f.seek(1,2)
11 >>> f.tell()
12 52

5.文件迭代

在Python中,文件不僅僅是一個對象,而且是一個可迭代對象!我們可以利用如下迭代方式,輕松的訪問和處理文件內容,而不必全部讀出(readlines)后再迭代(性能上差了很多哦!)

 1 >>> for eachline in file: 2 ... print(eachline)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM