Python檔案處理

2022-05-26 05:00:08 字數 3993 閱讀 7282

檔案處理的流程

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

f=open('

a.txt

','r

',encoding='

utf-8

') #

預設開啟模式就為r

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

data=f.read()

3. 關閉檔案

f.close()

開啟乙個檔案包含兩部分資源:作業系統級開啟的檔案+應用程式的變數。在操作完畢乙個檔案時,必須把與該檔案的這兩部分資源乙個不落地**,**方法為:

1、f.close() #

**作業系統級開啟的檔案

2、del f #

**應用程式級的變數

其中del f一定要發生在f.close()之後,否則就會導致作業系統開啟的檔案還沒有關閉,白白占用資源,

而python自動的垃圾**機制決定了我們無需考慮del f,這就要求我們,在操作完畢檔案後,一定要記住f.close()

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)

f=open(...)是由作業系統開啟檔案,那麼如果我們沒有為open指定編碼,那麼作業系統會用自己的預設編碼去開啟檔案,在windows下是gbk,在linux下是utf-8。

若要保證不亂碼,檔案以什麼方式存的,就要以什麼方式開啟。

f=open('

a.txt

','r

',encoding='

utf-8')

python2和python3的區別:

在python3中操作檔案只有一種選擇,那就是open()

在python2中則有兩種方式:file()與open()

兩者都能夠開啟檔案,對檔案進行操作,也具有相似的用法和引數,但是,這兩種檔案開啟方式有本質的區別,

file為檔案類,用file()來開啟檔案,相當於這是在構造檔案類,

而用open()開啟檔案,是用python的內建函式來操作,

我們一般使用open()開啟檔案進行操作,而用file當做乙個型別,比如type(f)

isfile

開啟檔案的模式

r,唯讀模式【預設模式,檔案必須存在,不存在則丟擲異常】

w,只寫模式【不可讀;不存在則建立;存在則刪除內容】

a,追加模式【可讀; 不存在則建立;存在則只追加內容】"+

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

r+,可讀寫檔案。【可讀;可寫;可追加】

w+,寫讀

a+,同a"u

"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+模式同使用)

rur+u"b

"表示處理二進位制檔案,不能指定編碼(如:ftp傳送上傳iso映象檔案,linux可忽略,windows處理二進位制檔案時需標註)

對於非文字檔案,我們只能使用b模式,"b

"表示以位元組的方式操作,而所有檔案也都是以位元組的形式儲存的,

rbwb

ab操作檔案的方法

f.read()

#讀取所有內容,游標移動到檔案末尾

f.readline() #

讀取一行內容,游標移動到第二行首部

f.readlines() #

讀取每一行內容,存放於列表中

f.write(

'1111\n222\n

') #

針對文字模式的寫,需要自己寫換行符

f.write('

1111\n222\n

'.encode('

utf-8

')) #

針對b模式的寫,需要自己寫換行符

f.writelines(['

333\n

','444\n

']) #

檔案模式

f.writelines([bytes('

333\n

',encoding='

utf-8

'),'

444\n

'.encode('

utf-8

')]) #

b模式f.readable()

#檔案是否可讀

f.writable() #

檔案是否可讀

f.closed #

檔案是否關閉

f.encoding #

如果檔案開啟模式為b,則沒有該屬性

f.flush() #

立刻將檔案內容從記憶體刷到硬碟

f.name

檔案內游標移動

一: read(3):

1. 檔案開啟方式為文字模式時,代表讀取3個字元

2. 檔案開啟方式為b模式時,代表讀取3個位元組

二: 其餘的檔案內游標移動都是以位元組為單位如seek,tell,truncate

注意:1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的

2. truncate是截斷檔案,所以檔案的開啟方式必須可寫,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,

所以truncate要在r+或a或a+等模式下測試效果

import

time

with open(

'test.txt

','rb

') as f:

f.seek(0,2)

while

true:

line=f.readline()

ifline:

print(line.decode('

utf-8'))

else

: time.sleep(0.2)

檔案的修改

檔案的資料是存放於硬碟上的,因而只存在覆蓋、不存在修改這麼一說,我們平時看到的修改檔案,都是模擬出來的效果,具體的說有兩種實現方式:

方式一:將硬碟存放的該檔案的內容全部載入到記憶體,在記憶體中是可以修改的,修改完畢後,再由記憶體覆蓋到硬碟(word,vim,nodpad++等編輯器)

import

oswith open(

'a.txt

') as read_f,open('

.a.txt.swap

','w

') as write_f:

data=read_f.read() #

全部讀入記憶體,如果檔案很大,會很卡

data=data.replace('

alex

','sb

') #

在記憶體中完成修改

write_f.write(data)

#一次性寫入新檔案

os.remove(

'a.txt')

os.rename(

'.a.txt.swap

','a.txt')

方式二:將硬碟存放的該檔案的內容一行一行地讀入記憶體,修改完畢就寫入新檔案,最後用新檔案覆蓋原始檔

import

oswith open(

'a.txt

') as read_f,open('

.a.txt.swap

','w

') as write_f:

for line in

read_f:

line=line.replace('

alex

','sb')

write_f.write(line)

os.remove(

'a.txt')

os.rename(

'.a.txt.swap

','a.txt

')

python檔案處理

def cal input input.txt output output.txt cal方法為主程式,推薦這樣做而不是python.exe xx.py 預設引數為python目錄的兩個txt,如為其他檔案自己指定。infile file input,r 開啟源資料檔案 outfile file o...

python 檔案處理

1.開啟檔案 open a.txt 當前目錄下的a.txt open root a.txt 開啟某個目錄下的檔案 2.按行顯示檔案 a open a.txt a.readline ni hao n a.readline wo xianzai hen xiang ni n a.readline ni ...

Python檔案處理

open name mode buf read size readline size readlines size 這裡的size是指,io定義的default buffer size為單位大小 iter 迭代器迭代每行 write str writelines sequwence of strin...