Python 檔案和輸入輸出小結

來源:互聯網
上載者:User
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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.