1. 程式人生 > >python--文件的讀寫操作

python--文件的讀寫操作

寫入文件 文件基本操作 bubuko 操作文件 大於 文件 x文件 簡單 內容

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--文件的讀寫操作