python檔案處理

來源:互聯網
上載者:User

標籤:pen   類型   file   編碼   link   windows   換行   檔案描述符   use   

一.檔案處理流程
  1. 開啟檔案,得到檔案控制代碼並賦值給一個變數
  2. 通過控制代碼對檔案進行操作
  3. 關閉檔案
二.基本操作2.1 檔案操作基本流程初探
f = open(‘chenli.txt‘) #開啟檔案first_line = f.readline()print(‘first line:‘,first_line) #讀一行print(‘我是分隔線‘.center(50,‘-‘))data = f.read()# 讀取剩下的所有內容,檔案大時不要用print(data) #列印讀取內容 f.close() #關閉檔案
2.2 檔案編碼檔案儲存編碼如下

此刻錯誤的開啟檔案
f=open(‘chenli.txt‘,encoding=‘utf-8‘)f.read() 

正確的開啟檔案
#不指定開啟編碼,預設使用作業系統的編碼,windows為gbk,linux為utf-8,與解譯器編碼無關
f=open(‘chenli.txt‘,encoding=‘gbk‘) #在windows中預設使用的也是gbk編碼,此時不指定編碼也行
f.read()
2.3 檔案開啟模式
1 檔案控制代碼 = open(‘檔案路徑‘, ‘模式‘)

 

開啟檔案時,需要指定檔案路徑和以何等方式開啟檔案,開啟後,即可擷取該檔案控制代碼,日後通過此檔案控制代碼對該檔案操作。

開啟檔案的模式有:

  • r ,唯讀模式【預設模式,檔案必須存在,不存在則拋出異常】
  • w,唯寫模式【不可讀;不存在則建立;存在則清空內容】
  • x, 唯寫模式【不可讀;不存在則建立,存在則報錯】
  • a, 追加模式【可讀;   不存在則建立;存在則只追加內容】

"+" 表示可以同時讀寫某個檔案

  • r+, 讀寫【可讀,可寫】
  • w+,寫讀【可讀,可寫】
  • x+ ,寫讀【可讀,可寫】
  • a+, 寫讀【可讀,可寫】

 "b"表示以位元組的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 註:以b方式開啟時,讀取到的內容是位元組類型,寫入時也需要提供位元組類型,不能指定編碼

2.4 檔案內建函數flush

flush原理:

  1. 檔案操作是通過軟體將檔案從硬碟讀到記憶體
  2. 寫入檔案的操作也都是存入記憶體緩衝區buffer(記憶體速度快於硬碟,如果寫入檔案的資料都從記憶體刷到硬碟,記憶體與硬碟的速度延遲會被無限放大,效率變低,所以要刷到硬碟的資料我們統一往記憶體的一小塊空間即buffer中放,一段時間後作業系統會將buffer中資料一次性刷到硬碟)
  3. flush即,強制將寫入的資料刷到硬碟

捲軸:

import sys,timefor i in  range(10):    sys.stdout.write(‘#‘)    sys.stdout.flush()    time.sleep(0.2)
2.5 檔案內游標移動

注意:read(3)代表讀取3個字元,其餘的檔案內游標移動都是以位元組為單位如seek,tell,read,truncate

整理中

2.6 open函數詳解

1. open()文法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函數有很多的參數,常用的是file,mode和encoding
file檔案位置,需要加引號
mode檔案開啟模式,見下面3
buffering的可取值有0,1,>1三個,0代表buffer關閉(只適用於二進位模式),1代表line buffer(只適用於文字模式),>1表示初始化的buffer大小;
encoding表示的是返回的資料採用何種編碼,一般採用utf8或者gbk;
errors的取值一般有strict,ignore,當取strict的時候,字元編碼出現問題的時候,會報錯,當取ignore的時候,編碼出現問題,程式會忽略而過,繼續執行下面的程式。
newline可以取的值有None, \n, \r, ”, ‘\r\n‘,用於區分分行符號,但是這個參數只對文字模式有效;
closefd的取值,是與傳入的檔案參數有關,預設情況下為True,傳入的file參數為檔案的檔案名稱,取值為False的時候,file只能是檔案描述符,什麼是檔案描述符,就是一個非負整數,在Unix核心的系統中,開啟一個檔案,便會返回一個檔案描述符。

2. Python中file()與open()區別
兩者都能夠開啟檔案,對檔案進行操作,也具有相似的用法和參數,但是,這兩種檔案開啟檔案有本質的區別,file為檔案類,用file()來開啟檔案,相當於這是在構造檔案類,而用open()開啟檔案,是用python的內建函數來操作,建議使用open

3. 參數mode的基本取值

Character Meaning
‘r‘ open for reading (default)
‘w‘ open for writing, truncating the file first
‘a‘ open for writing, appending to the end of the file if it exists
‘b‘ binary mode
‘t‘ text mode (default)
‘+‘ open a disk file for updating (reading and writing)
‘U‘ universal newline mode (for backwards compatibility; should not be used in new code)

r、w、a為開啟檔案的基本模式,對應著唯讀、唯寫、追加模式;
b、t、+、U這四個字元,與以上的檔案開啟模式組合使用,二進位模式,文字模式,讀寫入模式、通用分行符號,根據實際情況組合使用、

常見的mode取值組合

 1 r或rt 預設模式,文字模式讀 2 rb   二進位檔案 3      4 w或wt 文字模式寫,開啟前檔案儲存體被清空 5 wb  二進位寫,檔案儲存體同樣被清空 6      7 a  追加模式,只能寫在檔案末尾 8 a+ 可讀寫入模式,寫只能寫在檔案末尾 9     10 w+ 可讀寫,與a+的區別是要清空檔案內容11 r+ 可讀寫,與a+的區別是可以寫到檔案任何位置 
2.7 上下文管理
with open(‘a.txt‘,‘w‘) as f:    pass

 

with open(‘a.txt‘,‘r‘) as read_f,open(‘b.txt‘,‘w‘) as write_f:    data=read_f.read()    write_f.write(data)
2.8 檔案的修改
import oswith open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,        open(‘.a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f:    for line in read_f:        if line.startswith(‘hello‘):            line=‘哈哈哈\n‘        write_f.write(line)os.remove(‘a.txt‘)os.rename(‘.a.txt.swap‘,‘a.txt‘)

python檔案處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.