python檔案處理

2022-08-23 09:36:09 字數 4224 閱讀 1501

檔案操作分為讀、寫、改

一.檔案讀取(開啟檔案,r唯讀模式,預設模式,檔案必須存在)

f = open(file='test.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

file='test.txt'                   表示檔案路徑

mode='r' 表示唯讀(可以修改為其他)

encoding='utf-8' 表示將硬碟上的 0101010 按照utf-8的規則去「斷句」,再將「斷句」後的每一段0101010轉換成unicode的 01010101,unicode對照表中有01010101和字元的對應關係。

f.read() 表示讀取所有內容,內容是已經轉換完畢的字串。

f.close() 表示關閉檔案

ps: 此處的encoding必須和檔案在儲存時設定的編碼一致,不然「斷句」會不準確從而造成亂碼。

過程:1、由應用程式向作業系統發起系統呼叫open(...)

2、作業系統開啟該檔案,並返回乙個檔案控制代碼給應用程式

3、應用程式將檔案控制代碼賦值給變數f

檔案控制代碼 = open('檔案路徑', '模式','編碼')

迴圈讀取檔案內容

f = open("test.txt",'r',encoding="utf-8")

for line in f:

print(line)

f.close()

檔案讀取 rb 二進位制模式讀,檔案必須存在。

f = open(file='test.txt',mode='rb')

print(f.read().decode('utf8'))

f.close()

資料讀到記憶體裡直接是bytes格式,看內容,還需要手動decode,因此在檔案開啟階段,不需要指定編碼

二.檔案寫入(w,只寫模式,不可讀,不存在則建立,存在則清空內容)

f = open(file='test.txt',mode='w',encoding='utf-8')

f.write('llllll')

f.close()

encoding='utf-8'                                     將要寫入的unicode字串編碼成utf-8格式
f.write(...)                                         表示寫入內容,寫入的內容是unicode字串型別,內部會根據encoding轉換為制定編碼的 01101010101,即:位元組型別
檔案寫入wb,二進位制只寫模式,不可讀,不存在則建立,存在則清空內容

f = open('a.txt','wb')

print(f.write('hello'.encode('utf8')))

f.close()

追加:把內容追加到檔案尾部(不刪除之前內容)

f = open(file='test.txt',mode='a',encoding='utf-8')

f.write('llllll')

f.close()

三.檔案修改

import os

with open('test.txt','r',encoding='utf-8') as read_f,open('tmp','w',encoding='utf-8') as write_f:

data=read_f.read() #全部讀入記憶體,如果檔案很大,會很卡

data=data.replace('aaa','bbb』) #在記憶體中完成修改

write_f.write(data) #一次性寫入新檔案

os.remove('a.txt')

os.rename('tmp','a.txt')

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

import os

with open('a.txt','r',encoding='utf-8') as read_f,open('tmp','w',encoding='utf-8') as write_f:

for line in read_f:

line=line.replace('aaa','bbb')

write_f.write(line)

os.remove('a.txt')

os.rename('tmp','a.txt')

四.其他

1.使用with不用關閉檔案

with open('test.txt','a',encoding='utf-8') as f:

con = f.write('000')

print(con)

2.模式總結

文字模式

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

w,只寫模式:不可讀,不存在則建立,存在則清空內容

a,追加寫模式:不可讀,不存在則建立,存在則只追加內容

rb,二進位制唯讀模式:預設模式,檔案必須存在,不存在則丟擲異常

wb,二進位制只寫模式:不可讀,不存在則建立,存在則清空內容

ab,二進位制追加寫模式:不可讀,不存在則建立,存在則只追加內容

讀寫模式

r+,讀寫:可讀,可寫,從檔案開頭寫入

w+,寫讀:可讀,可寫,清空後再寫

a+,寫讀:可讀,可寫,從檔案末尾寫入

3.操作方法

f.read() #讀取所有內容,游標移動到檔案末尾

f.readline() #讀取一行內容,游標移動到第二行首部

f.readlines() #讀取每一行內容,存放於列表中,返回乙個list

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.flush() #立刻將檔案內容從記憶體刷到硬碟

f.readable() #檔案是否可讀

f.writable() #檔案是否可讀

f.closed #檔案是否關閉

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

4.游標操作

f.tell() 讀取指標的位置

f.seek(0) 設定指標的位置(0回到開頭)

truncate是截斷檔案,所以檔案的開啟方式必須可寫,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,所以truncate要在r+或a或a+等模式下測試效果

read(3) 檔案開啟方式為文字模式時,代表讀取3個字元,檔案開啟方式為b模式時,代表讀取3個位元組

seek,tell,truncate游標移動都是以位元組為單位

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

5.不知道檔案編碼的情況

import chardet

f = open('log',mode='rb')

data = f.read()

f.close()

result = chardet.detect(open('log',mode='rb').read())

print(result)

輸出:

百分之九十九的可能為 gb2312

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...