Python-21 文件

文件

使用open()函數,打開文件並返回文件對象。可以使用 help(open),來查看open函數的說明。

>>> help(open)
Help on built-in function open in module io:

open(...)
    open(file, mode='r', buffering=-1, encoding=None,
         errors=None, newline=None, closefd=True, opener=None) -> file object


關於文件打開模式參數的說明

   打開模式                                   執行操作                             
'r' 以只讀方式打開文件(默認)
'w'
以寫入的方式打開文件,會覆蓋已存在的文件件    
'x'
如果文件已經存在,使用此模式打開將引發異常
'a
以寫入模式打開,如果文件存在,則在末尾追加寫入     
'b'
以二進制模式打開文件
't'
以文本模式打開(默認)
'+'
可讀寫模式(可添加到其他模式中使用)
'U'
通用換行符支持


>>> f = open('E:\\record.txt')
>>> f
<_io.TextIOWrapper name='E:\\record.txt' mode='r' encoding='cp936'>
>>> 


文件對象方法

   文件對象方法            執行操作        
f.close() 關閉文件
f.read([size=-1]) 從文件讀取size個字符,當未給定size或給定負值的時候,讀取剩餘的
所有字符,然後作爲字符串返回
f.readline([size=-1])   

從文件中讀取並返回一行(包括行結束符),果有size有定義則返回size個字符

f.write(str) 將字符串str寫入文件
f.writelines(seq) 向文件寫入字符串序列seq,seq應該是一個返回字符串的可迭代對象
f.seek(offset,from) 在文件中移動文件指針,從from(0代表文件起始位置,1代表當前位置,2代表文件末尾)偏移offset個字節
f.tell() 返回當前在文件中的位置
f.truncate([size=file.tell()])           截取文件到size個字節,默認是截取到文件指針當前位置

>>> f = open("E:\\record.txt")
>>> f
<_io.TextIOWrapper name='E:\\record.txt' mode='r' encoding='cp936'>
>>> f.read()
'我常想在紛擾中尋出一點閒靜來,然而委實不容易。目前是這麼離奇,心裏是這麼蕪雜。\n一個人做到只剩了回憶的時候,生涯大概總要算是無聊了罷,但有時竟會連回憶也沒有。\n中國的做文章有軌範,世事也仍然是螺旋。\n前幾天我離開中山大學的時候,便想起四個月以前的離開廈門大學;\n聽到飛機在頭上鳴叫,竟記得了一年前在北京城上日日旋繞的飛機。\n我那時還做了一篇短文,叫做《一覺》。現在是,連這“一覺”也沒有了。'
>>> 

再讀的話,只是一個空字符串,說明已經指向了文件的末尾。

>>> f.read()
''
>>> 

文件指針

>>> f = open("E:\\record.txt")
>>> f.read(5)
'我常想在紛'
>>> f.tell()
10
>>> 

>>> f.seek(20,0)
20
>>> f.readline()
'點閒靜來,然而委實不容易。目前是這麼離奇,心裏是這麼蕪雜。\n'
>>> 


list(f) 直接轉爲列表
>>> list(f)
['一個人做到只剩了回憶的時候,生涯大概總要算是無聊了罷,但有時竟會連回憶也沒有。\n', '中國的做文章有軌範,世事也仍然是螺旋。\n', '前幾天我離開中山大學的時候,便想起四個月以前的離開廈門大學;\n', '聽到飛機在頭上鳴叫,竟記得了一年前在北京城上日日旋繞的飛機。\n', '我那時還做了一篇短文,叫做《一覺》。現在是,連這“一覺”也沒有了。']
>>> 

迭代讀取文本中的每一行,但這樣的效率不高

>>> line = list(f)
>>> for each_line in line:
	print(each_line)

	
我常想在紛擾中尋出一點閒靜來,然而委實不容易。目前是這麼離奇,心裏是這麼蕪雜。

一個人做到只剩了回憶的時候,生涯大概總要算是無聊了罷,但有時竟會連回憶也沒有。

中國的做文章有軌範,世事也仍然是螺旋。

前幾天我離開中山大學的時候,便想起四個月以前的離開廈門大學;

聽到飛機在頭上鳴叫,竟記得了一年前在北京城上日日旋繞的飛機。

我那時還做了一篇短文,叫做《一覺》。現在是,連這“一覺”也沒有了。
>>> 


可以直接迭代f,Python是不是很靈活!!!,這樣效率會比較高,也是官方文檔推薦的方式

>>> f.seek(0,0)
0
>>> for each_line in f:
	print(each_line)

	
我常想在紛擾中尋出一點閒靜來,然而委實不容易。目前是這麼離奇,心裏是這麼蕪雜。

一個人做到只剩了回憶的時候,生涯大概總要算是無聊了罷,但有時竟會連回憶也沒有。

中國的做文章有軌範,世事也仍然是螺旋。

前幾天我離開中山大學的時候,便想起四個月以前的離開廈門大學;

聽到飛機在頭上鳴叫,竟記得了一年前在北京城上日日旋繞的飛機。

我那時還做了一篇短文,叫做《一覺》。現在是,連這“一覺”也沒有了。
>>> 

文件的寫入

寫入文件,要確保打開文件的參數中帶有‘w’或‘a’

現在試圖用之前的f來寫入字符,出現io異常,不是可寫的狀態

>>> f.write('china')
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    f.write('china')
io.UnsupportedOperation: not writable
>>> 

現在以‘w’的方式,打開一個不存在的文件,會自動創建一個對應的文件

>>> f = open('E:\\test.txt','w')
>>> f.write('shenzhen')
8
>>> 
返回寫入字符數。

>>> f.close()
>>> 
寫完之後,要有close(),纔會寫入文件中。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章