Python提供了必要的函數和方法進行默認情況下的文件基本操作
文件打開方式:
open(name[,mode[buf]]) name:文件路徑 mode:打開方式 buf:緩沖buffering大小

文件讀取方式:
read([size]):讀取文件(讀取size字節,默認讀取全部)
readline([size]):讀取一行
readline([size]) :讀取緩沖buf(io.DEFAULT_SET_BUFFER),返回每一行所組成的列表
iter:使用迭代器遍歷讀取文件 f.open(name);iter_f = iter(f);用for line in iter_f循環迭代器
with open('pi_digits.txt') as f: # 默認模式為‘r’,只讀模式
contents = f.read() # 讀取文件全部內容
文件寫入方式:
write(str):將字符串寫入文件
writelines(sequence_of_strings):寫多行到文件,參數為可迭代的對象

當調用write(str)時,python解釋器調用系統調用想把把內容寫到磁盤,但是linux內核有文件緩存機制,所以緩存到內核的緩存區,當調用close()或flush()時才會真正的把內容寫到文件
或者寫入數據量大於或者等於寫緩存,寫緩存也會同步到磁盤上
關閉文件的目的
1:寫緩存同步到磁盤
2:linux系統中每個進程打開文件的個數是有限的
3:如果打開文件數到了系統限制,在打開文件就會失敗
python文件指針的操作:
seek(offset[,whence])移動文件指針
offset:偏移量,可以為負數
whence:偏移相對位置
python文件指針的定位方式:
os.SEEK_SET 相對於文件的起始位置 0
os.SEEK_CUR 相對於文件的當前位置 1
os.SEEK_END 相對於文件的結尾位置 2
Python 文件屬性:
file.fileno(): 文件描述符;
file.mode: 文件打開權限;
file.encoding: 文件編碼方式;
file.closed: 文件是否關閉;
Python 標准文件:
標准輸入文件:sys.stdin; 只讀 描述符為0
標准輸出文件:sys.stdout; 只寫 描述符為1
標准錯誤文件:sys.stderr; 只寫 描述符為2
Python 命令行參數:
sys模塊提供sys.argv屬性,通過該屬性可以得到命令行參數。sys.argv是一個字符串序列,保存着命令行的參數,其中sys.argv[0]是文件名,1~n是真正的參數
Python 文件編碼方式
Python文件默認的編碼格式是ASCII格式,要寫入中文可以將編碼格式進行轉換
1. a = unicode.encode(u'你好', 'utf-8') 轉換, 一個漢字在ASCII碼中占3字節,在unicode中占2字節。
2. 直接創建utf-8格式的文件。使用codecs模塊提供的方法創建指定編碼格式文件:
codecs.open(fname, mode, encoding, errors, buffering): 使用指定編碼格式打開文件
3. 使用系統提供的open()函數也可以創建指定編碼格式的文件:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Linux文件系統簡單示意圖

下面是python操作文件的流程

python基礎 3.0 file 讀取文件
當然,這種方法是普通的寫入和讀取,我們通常還有這樣的問題,那就是字典啊,元祖啊,集合啊等對象,需要寫入,但是讀取的時候還是要按照原來的形式讀取,並非上述方法中的字符串方式讀取。那我們就可以使用pickle這個工具了:
首先要導入包
|
1
|
import
pickle
|
然后要進行代碼的編寫,這里要記住,寫入文件模式是wb,讀取時rb(b一般都是二進制,想必大家應該知道了,它的存儲方式):
|
1
|
pick_file
=
open
(
"pick.pick"
,
'wb'
)
|
如果此時,我們有一個集合:
|
1
|
list1
=
[
1
,
2
,
3
,
4
,
5
,
'abd'
,[
'a'
,
4
,
'g'
,
'd'
]]
|
則,我么可以這樣存儲:
|
1
2
|
pickle.dump(list1,pick_file)
pickle.close()
|
如果讀取時候,我們可以這樣做:
|
1
2
3
|
pick_file
=
open
(
"pick.pick"
,
'wb'
)
list2
=
pickle.load(pick_file)
pickle.close()
|
