檔案處理
f=open(‘檔案’,’r’) 打開一個檔案
f.close() 關閉檔案,相當于儲存
1、字元編碼
在檔案處理過程中,首先有一個重要的概念,就是字元編碼
字元編碼:把人類的字元編譯成計算機能認識的數字
字元編碼表:就是一張字元與數字對應關系的表
ascii
gbk
utf-8 (硬碟中常用編碼)
unicode (記憶體中常用編碼)
unicode ---->encode(‘utf-8’) 編碼----> bytes
bytes ----> decode(‘utf-8’)解碼 ----> Unicode
原則:字元以什麼格式編譯的,就要以什麼格式解碼
python3中的字元串分為兩種
x='egon' 預設存為unicode
y=x.encode('utf-8') 使用encode編碼為bytes
python2中字元串也分為兩種
x=u'egon' 加u表示存為Unicode格式,與python3的字元串一樣
y='alex' 預設存為bytes
2、檔案模式
r 文本模式的讀,在檔案不存在,不會建立新檔案
w 文本模式的寫,檔案存在則清空,不存在則建立
a 文本模式的追加,檔案存在光标跳到檔案末尾,檔案不存在建立
rb 即直接從硬碟中讀取bytes
wb 以二進制寫模式打開
ab 以二進制追加模式打開
r+ 讀的時候可寫
w+ 寫的時候可讀
a+ 追加時可讀寫
a. r模式
f.read() #一次性讀取文本中全部的内容,以字元串的形式傳回結果
read()的使用:
read(3) #檔案打開方式為文本模式時,代表讀取3個字元
#檔案打開方式為b模式時,代表讀取3個位元組
#unicode格式中3個位元組=1個字元
控制光标的移動(都是以位元組為機關):
f.seek() #控制光标移動幾個位元組
有三種模式:
0 從首位元組開始
1 b模式下運作,以目前光标所在的位置為參照物
2 b模式下運作,以最後一個位元組為參照物
練習:模拟tail –faccess.log
<code># python3 tail.py -f access.log</code>
<code>import</code> <code>time</code>
<code>import</code> <code>sys</code>
<code>with </code><code>open</code><code>(r</code><code>'%s'</code> <code>%</code> <code>sys.argv[</code><code>2</code><code>], </code><code>'rb'</code><code>) as f:</code>
<code> </code><code>f.seek(</code><code>0</code><code>, </code><code>2</code><code>)</code>
<code> </code><code>while</code> <code>True</code><code>:</code>
<code> </code><code>line </code><code>=</code> <code>f.readline()</code>
<code> </code><code>if</code> <code>line:</code>
<code> </code><code>print</code><code>(line.decode(</code><code>'utf-8'</code><code>),end</code><code>=</code><code>'')</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>time.sleep(</code><code>0.2</code><code>)</code>
truncate() #檔案的打開方式為可寫,從檔案開頭開始截取,留下指定位元組之後的位元組
f.readline() #隻讀取文本第一行的内容,以字元串的形式傳回結果
f.readlines() #讀取文本所有内容,并且以數列的格式傳回結果,一般配合for in使用
f.readble() #判斷檔案是否有讀的權限,傳回布爾值
b. w模式
f.write() #寫入檔案,換行需要手動寫換行符\n
f.writelines() #一次寫入多行
c. a模式
f.tell() #檢視光标位置
with open(‘檔案’,’w’,encoding=’utf-8’) as f:
f.write(‘11111\n’) #會把檔案的内容指派給f,執行完畢會自動close
python中把腳本後的參數傳入腳本内的方法:
import sys
print(sys.argv)
一個cp檔案的python小腳本
<code>#python3 copy.py source.file target.file</code>
<code>if</code> <code>len</code><code>(sys.argv) < </code><code>3</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'Usage:python3 copy.py source.file target.file'</code><code>)</code>
<code> </code><code>sys.exit()</code>
<code>#r'C:\Users\Administrator\PycharmProjects\python18期周末班\day3\test.jpg'</code>
<code>with </code><code>open</code><code>(r</code><code>'%s'</code> <code>%</code><code>sys.argv[</code><code>1</code><code>],</code><code>'rb'</code><code>) as read_f,\</code>
<code> </code><code>open</code><code>(r</code><code>'%s'</code> <code>%</code><code>sys.argv[</code><code>2</code><code>],</code><code>'wb'</code><code>) as write_f:</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>read_f:</code>
<code> </code><code>write_f.write(line)</code>
<code></code>
本文轉自lyndon部落格51CTO部落格,原文連結http://blog.51cto.com/lyndon/1948655如需轉載請自行聯系原作者
遲到的棟子