Python 檔案和輸入輸出小結

2021-06-18 16:24:08 字數 4035 閱讀 9440

python 是物件導向程式設計語言,檔案也是一種類,下面簡單介紹下,方便需要的朋友

e="padding-top: 5px; padding-bottom: 5px; margin-top: 0px; margin-bottom: 0px;">

1.開啟和關閉檔案(open(),file(),close())

有兩種內建函式可以獲取檔案物件:open和file。他們的用法完全一樣。下面只以open()為例子講解。獲取乙個檔案物件(開啟檔案)的語法如下:       

複製**

**如下:

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代表使用系統預設緩衝方式。只要使用系統預設就好。

一些例子:

複製**

**如下:

>>> f = open('/etc/passwd','r')

>>> f1 = open('/etc/test','w')

使用完檔案後,一定要記得關閉檔案,操作如下:

複製**

**如下:

>>> f.close()

2.檔案讀入

2.1.file.read(size = -1) 

讀取從當前檔案游標起size個位元組的檔案內容。如果size=-1,則讀取所有剩餘位元組。

複製**

**如下:

>>> f = open('/etc/passwd')

>>> f.read(100)

'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol'

2.2.file.readlines(size=-1)

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

複製**

**如下:

>>> f.readline()

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

>>> f.readline(1)

'a'2.3.file.readlines(sizhint=0)

讀取檔案所有的行,並作為乙個列表返回(包括行結束符),如果sizhint>0則返回總和大約sizhint位元組的行(具體由緩衝區大小決定)。

複製**

**如下:

f.readlines()

['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.檔案輸出

3.1.file.write(str)

向檔案中寫入指定的字串。

複製**

**如下:

>>> f = file('/root/test.py','w+')

>>> f.write("print 'hello,world'")

>>> f.read() ''

>>> f.close()

>>> file('/root/test.py','r').read()

"print 'hello,world'"

3.2.file.write(seq)

向檔案寫入字串序列seq。seq是任何返回字串的可迭代物件。

複製**

**如下:

>>> f = file('/root/test.py','a+')

>>> codelst = ['\n','import os\n',"os.popen('ls').read()\n"]

>>> f.writelines(codelst)

>>> f.close()

>>> file('/root/test.py','r').read()

"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()方法可以返回當前檔案游標的位置。

5.檔案迭代

在python中,檔案不僅僅是乙個物件,而且是乙個可迭代物件!我們可以利用如下迭代方式,輕鬆的訪問和處理檔案內容,而不必全部讀出(readlines)後再迭代(效能上差了很多哦!)

複製**

**如下:

for eachline in f:

#dealwith eachline of f

例如:複製**

**如下:

>>> for eachline in f:

...     print eachline

6.os、os.path與檔案

os和os.path中提供了一些跟檔案有關的介面,下面介紹一些常用的介面。其他介面可以自己查閱相關文件。

注意:以下函式傳入的引數都是字串形式的檔案名字,檔名可由檔案物件的name屬性獲得。

函式描述

os.path.basename()

去掉目錄路徑,返回檔名

os.path.dirname()

去掉檔名,返回目錄路徑

os.path.getatime()

os.path.getctime()

os.path.getmtime()

os.path.size()

返回檔案的atime,ctime,mtime和大小

os.path.exists()

該檔案或目錄是否存在

os.path.abs()

指定路徑是否為絕對路徑

os.path.isdir()

路徑是否存在且為目錄

os.path.isfile()

路徑是否存在且為檔案。

os.path.islink()

指定路徑是否存在且為乙個符號鏈結

複製**

**如下:

>>> import os.path

>>> f = open('/root/test.py','r')

>>> os.path.basename(f.name)

'test.py'

>>> f.name

'/root/test.py'

>>> os.path.getsize(f.name) 52

>>> os.path.isabs(f.name)

true

>>> os.path.isdir(f.name)

false

Python 檔案和輸入輸出

1 內建函式open 的基本語法 file object open file name,access mode r buffering 1 buffering代表訪問檔案所使用的緩衝方式,其中0代表不緩衝,1表示只緩衝一行資料,任何其他大於1的值代表使用給定值作為緩衝區大小。不提供該引數或者給定負值...

Python檔案輸入輸出

本文以.txt檔案為例,說明python從.txt檔案中讀取內容和向.txt檔案寫入內容的方法。a.txt檔案內容 犬吠水聲中,桃花帶雨濃。樹深時見鹿,溪午不聞鐘。野竹分青靄,飛泉掛碧峰。無人知所去,愁倚兩三松。讀取檔案 open filename,mode open返回乙個檔案物件。第乙個引數是乙...

python 檔案輸入輸出

我們開啟乙個檔案,並使用乙個物件來表示該檔案 f open 檔名,模式 f open f.txt 文字形式 唯讀模式 預設值 f open f.txt rt 文字形式 唯讀模式 同預設值 f open f.txt w 文字形式 覆蓋寫模式 f open f.txt a 文字形式 追加寫模式 讀檔案 ...