天天看點

python檔案操作

檔案操作流程

1.打開檔案,得到檔案句柄并指派給一個變量

2.通過句柄對檔案進行操作

3.關閉檔案

最基本的打開,隻能閱讀,不能操作.

<code>data </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>).read()</code>

<code>print</code><code>(data)</code>

<code>print</code><code>(</code><code>type</code><code>(data))        </code><code>#字元串格</code>

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)        檔案句柄指派給f</code>

<code>data </code><code>=</code> <code>f.read()</code>

<code>data2 </code><code>=</code> <code>f.read()             當這裡讀取時,python将從上次data讀取的最後開始讀取,也就是什麼也沒有。</code>

<code>r 讀取檔案         不能寫;</code>

<code>w 建立一個檔案     不能讀;</code>

<code>a 追加内容         不覆寫檔案,不能讀取。</code>

<code>f.read()             閱讀</code>

<code>f.write()            寫檔案</code>

<code>注意:</code>

<code>U表示在讀取時,可以将\r\n自動替換成\n(與r或r</code><code>+</code><code>模式同使用)</code>

<code>    </code><code>rU</code>

<code>    </code><code>r</code><code>+</code><code>U</code>

<code>b表示處理二進制檔案(如:FTP發送上傳檔案,linux可忽略,windows處理二進制檔案時需要标注)</code>

讀取前五行

<code> </code><code>方法一、</code>

<code>  </code><code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>  </code><code>print</code><code>(f.readline())</code>

<code>  </code><code>f.close()</code>

<code>方法二、</code>

<code>  </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>):</code>

<code>      </code><code>print</code><code>(f.readline())</code>

第五行不列印

<code>f.readlines()        是一個清單,</code>

<code>  </code><code>for</code> <code>i </code><code>in</code> <code>f.readlines():</code>

<code>      </code><code>print</code><code>(i.strip())         每行後面預設有一個換行符,用strip去掉;</code>

<code>方法一、</code>

<code>  </code><code>for</code> <code>index,i </code><code>in</code> <code>enumerate</code><code>(f.readlines()):</code>

<code>      </code><code>if</code> <code>index </code><code>=</code><code>=</code> <code>4</code><code>:</code>

<code>          </code><code>print</code><code>(</code><code>"------分割線--------"</code><code>)</code>

<code>          </code><code>continue</code>

<code>      </code><code>print</code><code>(i.strip())</code>

<code>  </code><code>count </code><code>=</code> <code>0</code>

<code>  </code><code>for</code> <code>i </code><code>in</code> <code>f:              f已經成為一個疊代器</code>

<code>      </code><code>if</code> <code>count </code><code>=</code><code>=</code> <code>4</code><code>:</code>

<code>          </code><code>print</code><code>(</code><code>"------分割線-------"</code><code>)</code>

<code>          </code><code>count </code><code>+</code><code>=</code> <code>1</code>

<code>          </code><code>continue</code>         <code>結束本次循環,進行下一次循環</code>

<code>      </code><code>count </code><code>+</code><code>=</code> <code>1</code>

檔案方法:

f = open("file","r",encoding="utf-8")

檢視目前指針位置

<code>print</code><code>(f.tell())</code>

<code>print</code><code>(f.readline())</code>

指針回到檔案開頭

<code>f.seek(</code><code>0</code><code>)</code>

<code>  </code><code>print</code><code>(f.tell())</code>

檢視檔案編碼

<code>print</code><code>(f.encoding)</code>

做異常處理 f.errors

檢視是不是一個終端裝置

<code>print</code><code>(f.isatty())</code>

判斷光标是否可以移動,可以True 否則False

<code>print</code><code>(f.seekable())</code>

判斷檔案是否可讀

<code>print</code><code>(f.readable())</code>

判斷檔案是否可寫

<code>print</code><code>(f.writable())</code>

強制重新整理;用于實時将寫的資料寫到硬碟上;

<code>print</code><code>(f.flush())</code>

flush 事例進度條

<code>import</code> <code>sys,time</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>100</code><code>):</code>

<code>        </code><code>sys.stdout.write(</code><code>" "</code><code>)</code>

<code>  </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>100</code><code>):</code>

<code>      </code><code>sys.stdout.write(</code><code>" "</code><code>)</code>

<code>      </code><code>sys.stdout.flush()</code>

<code>      </code><code>time.sleep(</code><code>0.1</code><code>)</code>

判斷檔案是否關閉

<code>print</code><code>(f.closed)</code>

截斷

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"a"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>  </code><code>f.truncate()             不加參數清空檔案</code>

<code>  </code><code>f.truncate(</code><code>10</code><code>)           從檔案開始截斷</code><code>10</code><code>個位元組</code>

檔案讀寫模式打開(讀和追加寫)

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>  </code><code>f.write(</code><code>"==============="</code><code>)</code>

檔案寫讀模式打開(建立一個新檔案寫和讀,然後在追加寫。)

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"w+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>  </code><code>f.write(</code><code>"===============\n"</code><code>)</code>

<code>  </code><code>print</code><code>(f.seek(</code><code>10</code><code>))</code>

<code>  </code><code>f.write(</code><code>"+++++++++++++++\n"</code><code>)</code>

檔案追加讀寫模式打開(可以追加寫和讀)

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"a+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

檔案二進制編碼方式讀;應用于網絡傳輸

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"rb"</code><code>)</code>

檔案二進制編碼方式寫;應用于網絡傳輸

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"wb"</code><code>)</code>

<code>print</code><code>(f.write(</code><code>"hhhhhhh"</code><code>.encode()))       預設是utf</code><code>-</code><code>8</code><code>模式</code>

<code>f.close()</code>

檔案二進制編碼方式追加;應用于網絡傳輸

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"ab"</code><code>)</code>

檔案修改

1.全部加載到記憶體裡,重新寫到檔案裡

2.修改後,寫在另一個檔案裡

<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>f2 </code><code>=</code> <code>open</code><code>(</code><code>"file2"</code><code>,</code><code>"w"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>f:</code>

<code>    </code><code>if</code> <code>"2222"</code> <code>in</code> <code>i:</code>

<code>        </code><code>i </code><code>=</code> <code>i.replace(</code><code>"2222"</code><code>,</code><code>"BBBB"</code><code>)          </code><code>#i.replace替換功能</code>

<code>    </code><code>f2.write(i)</code>

<code>f2.close()</code>

檔案操作自動關閉with

特點:自動關閉檔案。

為了避免打開檔案後忘記關閉,可以通過管理上下文。

<code>例如:with </code><code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>)as f:</code>

<code>          </code><code>print</code><code>(f.readline())</code>

python2.7以後可以同時打開多個檔案。

<code>with </code><code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>) as f,\</code>

<code>      </code><code>open</code><code>(</code><code>"file2"</code><code>,</code><code>"r"</code><code>) as f2:</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>f:</code>

<code>        </code><code>print</code><code>(i.strip())</code>

<code>    </code><code>for</code> <code>i2 </code><code>in</code> <code>f2:</code>

<code>        </code><code>print</code><code>(i2.strip())</code>

(python官方要求:一行代碼不要超過80個代碼;)

     本文轉自506554897 51CTO部落格,原文連結:http://blog.51cto.com/506554897/1945833,如需轉載請自行聯系原作者