python IO文件處理


python的文件讀寫操作符有:
r

w

a

r+

w+

rb

wb

除了以file的方式打開文件,還有一種方式就是open了,兩個的用法是一模一樣的,可以看成open就是file的別名

下面這個表格是轉自:http://blog.csdn.net/cnmilan/article/details/9142561

w

以寫方式打開文件,可向文件寫入信息。如文件存在,則清空該文件,再寫入新內容

a

以追加模式打開文件(即一打開文件,文件指針自動移到文件末尾),如果文件不存在則創建,可以追加文件內容,但是只可以寫,不可以讀

r+

以讀寫方式打開文件,可對文件進行讀和寫操作。下次再執行r+的時候,文件會從指針0位置開始寫,寫操作是默認從0位置開始寫的。要是想從文件末尾追加可以使用a

w+

消除文件內容,然后以讀寫方式打開文件。

a+

以讀寫方式打開文件,並把文件指針移到文件尾。(要是文件不存在,就創建這個文件),可讀可寫

b

以二進制模式打開文件,而不是以文本模式。該模式只對Windows或Dos有效,類Unix的文件是用二進制模式進行操作的。

 

操作文件對象方法

f.close()

關閉文件,記住用open()打開文件后一定要記得關閉它,否則會占用系統的可打開文件句柄數。

f.fileno()

獲得文件描述符,是一個數字

f.flush()

刷新輸出緩存

f.isatty()

如果文件是一個交互終端,則返回True,否則返回False。

f.read([count])

讀出文件,如果有count,則讀出count個字節。一下把整個文件的讀出來,整個文件以字符串的形式顯示出來,當我們執行完f.read()之后再執行f.read()會發現沒有內容展現出來,那是因為我們讀取文件之后,文件指針跑到末尾了,要是想重新能夠讀取內容,可以執行f.seek(0),把文件指針放到起始位置

f.readline()

讀出一行信息。(文件內容一行一行顯示出來)

f.readlines()

讀出所有行,也就是讀出整個文件的信息(先把文件讀到內存里,所有內容以一個列表的形式展示出來)

f.seek(offset[,where])

把文件指針移動到相對於where的offset位置。where為0表示文件開始處,這是默認值 ;1表示當前位置;2表示文件結尾。

f.tell()

獲得文件指針位置

f.truncate([size])

截取文件,使文件的大小為size。

f.write(string)

把string字符串寫入文件。

f.writelines(list)

把list中的字符串一行一行地寫入文件,是連續寫入文件,沒有換行(以列表的性形式寫進去內容)


 

還有一個f.xreadlines()   相當於迭代器,循環一次讀一行內容,一行一行的往內存里面讀,讀完一行之后扔一行,然后讀取下一行,非常省內存

現在看一下下面幾個循環

>>> for line in f.readlines():
...     print line,
...
ppppp
haha
gogogo
kkkkkkkkkkkkbbbb
aaaa

>>> f.close()
>>> f = file('test.txt','r')
>>> for line in f.readlines():
...     print line
...
ppppp

haha

gogogo

kkkkkkkkkkkkbbbb

aaaa
我們可以看到上面在執行print的時候兩者的區別是,要是沒有加逗號","的話,文件輸出的時候會換行所以為了好看我們在print的時候加上一個逗號”,“

 

>>> f = file('test.txt','r')
>>> for line in f.readline():
...     print line,
...
p p p p p  

 

我們在看一下f.xreadlines()

>>> f.close()
>>> f = file('test.txt','r')
>>> for line in f.xreadlines():
...     print line,
...
ppppp
haha
gogogo
kkkkkkkkkkkkbbbb
aaaa

我們肉眼看到好像f.readline 和f.xreadlines沒有什么區別,但是當我們循環一個大文件的時候我們就會看到xreadlines()的性能會比readline好很多

 

還有一種循環就是

>>> f.close()
>>> f = file('test.txt','r')
>>> while True:
...     line = f.readline()
...     print line,
...     if not line:break
...
ppppp
haha
gogogo
kkkkkkkkkkkkbbbb
aaaa

這個性能更低,沒讀取一次的時候就要執行一個判斷語句

例1:從文本文件中每讀取一行文本便輸出

我們現在來看一下下面的實例:

[root@git 628]# pwd
/root/python/python_day_practice/628

>>> f = file('test.txt','w')
>>> f.write('this is a good day!')

在終端輸入上面代碼,這種情況下,我們到628目錄下看看有沒有我們寫的這個文件test.txt,我們發現是有的,但是文件里面沒有內容。原因是我們寫完之后沒有保存,文件內容還在內存中,沒寫到硬盤上

這時候我們執行

>>> f.close()

我們就能看到文件test.txt文件下有內容了

 

我們要是想讀取文件的不同行的內容的操作方法有

>>> f = file('test.txt','r')
>>> b = f.readlines()
>>> b[1]
'haha \n'
>>> b[2]
'gogogo \n'
>>>

還有一種方法就是先讀取全部的內容,然后以   \n    這個字符為准,然后切片

>>> f = file('test.txt','r')
>>> c = f.readline()
>>> c.split('\n')[0]
'ppppp '

 

文件內容的替換()

下面還要說一種python 中的fileinput模塊

>>> import fileinput(要是批量修改文件的話可以使用這個方法)

>>> for line in fileinput.input('test.txt',inplace=1):
...   line = line.replace('go','break')
...   print line,
...

把文件中的"go"換成”break“,注意這里要print 一下,不然文件中的內容不發生變化
>>> for line in fileinput.input('test.txt',inplace=1,backup='.bak'):
...   line = line.replace('back','go')
...   print line,
...

這里加了一個backup的意思就是說把原有的文件給備份一下,防止出錯

 

假如說我們用file 或者 open的方式打開文件或者寫入內容的時候。我們需要執行。f.close()關閉文件,把內容從內存中釋放的硬盤中

 

但是現在有一種方法不需要執行f.close(),那就是with  ......   as

python 中with的作用就是自動的釋放對象,

>>> with open('test7.txt','r') as f:
...     for i in f.xreadlines():
...         print i
...
123

345

456

677

577

 

還有一點要注意的是,我們網文件里面寫內容的時候,要注意我們只能寫字符串類型的,所以這里要注意了,當我們想向文件里面寫數字是不行的,這里我們就得轉換一下字符類型

我們可以使用str 或者是  join的方式轉換,具體實例參照如下:

>>> a = 4
>>> type(a)
<type 'int'>
>>> type(str(a))
<type 'str'>

 

現在我們來說一下,join和split的用法

join是用來連接字符串的,剛好split的用法剛好相反,他是用來拆分字符串的

>>> a = ['1','2','3']
>>> a[1]
'2'
>>> type(a[1])
<type 'str'>
>>> ''.join(a)
'123'
>>> '*'.join(a)
'1*2*3'
>>>

 

現在我們來看一下split的用法

>>> b = 'my**name**is**haha'

>>> b.split("**",1)
['my', 'name**is**haha']
>>> b.split("**",4)
['my', 'name', 'is', 'haha']
>>> b.split("**")
['my', 'name', 'is', 'haha']
>>> b.split("**",2)
['my', 'name', 'is**haha']

 


免責聲明!

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



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