python可以處理檔案嗎 python檔案處理

2021-10-11 20:13:54 字數 4066 閱讀 3178

一.檔案處理流程

開啟檔案,得到檔案控制代碼並賦值給乙個變數

通過控制代碼對檔案進行操作

關閉檔案

二.基本操作

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原理:

檔案操作是通過軟體將檔案從硬碟讀到記憶體

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

flush即,強制將寫入的資料刷到硬碟

滾動條:

import sys,time

for 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'『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 二進位制檔案

4 w或wt 文字模式寫,開啟前檔案儲存被清空

5 wb 二進位制寫,檔案儲存同樣被清空

7 a 追加模式,只能寫在檔案末尾

8 a+ 可讀寫模式,寫只能寫在檔案末尾

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 os

with 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')

檔案操作:

open()   開啟檔案    以utf-8方式開啟

.read()     讀取檔案

.readline()   讀取檔案,每次只讀取一行

readdines()     讀取檔案,全都讀取,以列表形式顯示

write      寫檔案

writelines()    可以以列表方式寫檔案

.close()    關閉檔案

.closed     檢視檔案是否關閉

readable     判斷是否可讀

writable     判斷是否可寫

seek          移動游標,以位元組方式

tell          顯示當前游標位置

truncate     截斷操作,只保留截斷數值前面的內容

py 檔案讀取 異常處理

import readline import math import json py檔案讀取 異常處理 a 第一行第二行 第三行 從檔案讀取資料 with open d a.txt as f content f.read print content with open乙個file,當做乙個物件,直接...

py 開啟檔案後,可以幹的事情

file物件的屬性 乙個檔案被開啟後,你有乙個file物件,你可以得到有關該檔案的各種資訊。屬性 描述 file.closed 返回true如果檔案已被關閉,否則返回false。file.mode 返回被開啟檔案的訪問模式。file.name 返回檔案的名稱。file.softspace 如果用pr...

Python可以多繼承嗎??

物件導向的程式設計帶來的主要好處之一是 的重用,實現這種重用的方法之一是通過繼承機制。繼承完全可以理解成類之間的父與子的關係。例子 class prtutu def init self print prtutu class prtutu1 def init self,a print prtutu1 ...