python--文件的讀寫操作
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 文件訪問 1.在python中要訪問文件,首先要打開文件,也就是open r: 只讀 w: 只寫 ,文件已存在則清空,不存在則創建 a:追加 ,寫到文件末尾。如果文件存在,則在文件最後去追 加。文件不存在就去創建 +-:更新(可讀可寫) r+ :以讀寫模式打開 w+ :以讀寫模式打開(參見w) a+:以讀寫模式打開(參見a) rb:以二進制讀模式打開 wb:以二進制寫模式打開 ab:以二進制追加模式打開(參見a) rb+:以二進制讀寫模式打開(參見r+) wb+:以二進制讀寫模式打開(參見w+) ab+: 以二進制讀寫模式打開(參見a+) 2.打開文件。open打開文件 read讀文件,close關閉文件 import codecs fd = codecs.open(‘2.txt‘) print fd.read() fd.close() >>> 11111 2222 33333 aaaaa bbbbb cccccc 3.查看文件有哪些方法 import codecs fd = codecs.open(‘b.txt‘) print fd.read() print dir(fd) fd.close() >>> 11111 2222 333333 [‘close‘, ‘closed‘, ‘encoding‘, ‘errors‘, ‘fileno‘, ‘flush‘, ‘isatty‘, ‘mode‘, ‘name‘, ‘newlines‘, ‘next‘, ‘read‘, ‘readinto‘, ‘readline‘, ‘readlines‘, ‘seek‘, ‘softspace‘, ‘tell‘, ‘truncate‘, ‘write‘, ‘writelines‘, ‘xreadlines‘] 1>fd.read() 方法,read()方法讀取的是整篇文檔。 fd = codecs.open(‘2.txt‘) text = fd.read() print type(text) >>><type ‘str‘> 2>replace()函數替換文件中的某個元素。打開文件,讀取後,對整個字符串進行操作.把2.txt 文件中的1替換成z fd = codecs.open(‘2.txt‘) a1 = fd.read() print a1 a2 = a1.replace(‘1‘,‘z‘) print a2 >>> 11111 2222 33333 aaaaa bbbbb cccccc zzzzz 2222 33333 aaaaa bbbbb cccccc 3> 寫文件,codecs.open()函數,避免文件亂碼 fd = codecs.open(‘3.txt‘,‘w‘) fd.write(‘liuzhenchuan\n‘) fd.write(‘hello world\n‘) fd.write(‘xiaban\n‘) fd.close() >>> liuzhenchuan hello world xiaban 4>fd.readlines()方法,讀取文件,最後把文件每行內容作為一個字符串放在一個list中 fd = open(‘3.txt‘) print fd.readlines() fd.close() >>> [‘liuzhenchuan\n‘, ‘hello world\n‘, ‘xiaban\n‘] 5>fd.readline()方法,讀取文件,讀取文件一行,類型為字符串 >>> l 6>#fd.readline()方法,讀取文件一行內容,返回一個字符串. # fd.next()方法,讀取文件下一行內容,返回一個字符串 fd = codecs.open(‘3.txt‘,‘r‘) print fd.readline() print fd.next() fd.close() >>> liuzhenchuan hello world 7>#write()方法,必須傳入一個字符串. fd = codecs.open(‘5.txt‘,‘w+‘) fd.write(‘a\nb\nc\n‘) fd.close() >>> a b c #writelines()方法,必須傳入一個列表/序列 fd = codecs.open(‘6.txt‘,‘w‘) fd.writelines([‘123\n‘,‘234\n‘,‘345\n‘]) fd.close() >>> 123 234 345 8>with用法,不需要用fd.close()關閉文件 with codecs.open(‘3.txt‘,‘rb‘) as fd: print fd.read() fd.close() >>> liuzhenchuan hello world xiaban 9>打印文件行號和文件內容 with codecs.open(‘2.txt‘) as fd: for line,value in enumerate(fd): print line,value, >>> 0 liuzhenchuan 1 hello world 2 xiaban 10>過濾文件某行的內容 with codecs.open(‘3.txt‘) as fd: for line,value in enumerate(fd): if line == 3-2: print value >>> hello world 11>導入linecache模塊,使用linecache.getline()方法,獲取文件固定行的內容 import linecache count = linecache.getline(‘3.txt‘,1) print count >>> liuzhenchuan
python--文件的讀寫操作