天天看點

python基礎---檔案處理

檔案處理

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) &lt; </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如需轉載請自行聯系原作者

遲到的棟子