Python文字讀寫及編碼檢測

2021-09-25 15:54:33 字數 3990 閱讀 5505

(因為csdn編輯器的原因,**後面有一串空白,但是在編輯預覽裡是正常的)

目錄

1.文字讀寫

2.路徑及檔名操作

3.編碼判斷

python的檔案操作介面屬於簡單易用型的,利用open函式開啟檔案之後就可以進行操作了,也可以用print重定向輸出到檔案。

file_path=r'./測試檔案.txt'

#1-寫檔案

#文字模式可以不加t,二進位制讀寫需要加b

#with語句開啟檔案是能結束時自動關閉的,如果不用with記得手動關閉

with open(file_path,'w+',encoding='utf8') as f:

f.write('這是一行中文\n')

f.write('test write text\n')

#輸出重定向到檔案檔案必須是以文字模式開啟。

#如果檔案是二進位制模式的話,列印就會出錯。

print('hello world!', file=f)

#2-讀取檔案

#讀取時需要用與文字相容的編碼開啟,否則會拋異常

with open(file_path,'r',encoding='utf8') as file:

#read可以指定最大讀取字元數,如file.read(10)

data=file.read()

print('file encoding:'+file.encoding)

print('file text:'+data)

對於open函式,原型為open(name[, mode[, buffering]]),其中:

mode引數:t

文字模式 (預設)。

x寫模式,新建乙個檔案,如果該檔案已存在則會報錯。

b二進位制模式。

+開啟乙個檔案進行更新(可讀可寫)。

u通用換行模式(不推薦)。

r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。

rbr+

開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。

rb+w

開啟乙個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

wbw+

開啟乙個檔案用於讀寫。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。

wb+a

開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。

ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

open函式會建立乙個file物件。

file物件常用方法:

close()

關閉檔案。關閉後檔案不能再進行讀寫操作。

flush()

重新整理檔案內部緩衝,直接把內部緩衝區的資料立刻寫入檔案, 而不是被動的等待輸出緩衝區寫入。

next()

返回檔案下一行。

read([size])

從檔案讀取指定的字元數,如果未給定或為負則讀取所有。

readline([size])

讀取整行,包括 "\n" 字元。

readlines([sizeint])

讀取所有行並返回列表,若給定sizeint>0,則是設定一次讀多少位元組,這是為了減輕讀取壓力。

for line in file: print line :通過迭代器訪問。

seek(offset[,whence])

設定檔案當前位置

tell()

返回檔案當前位置。

truncate([size])

擷取檔案,擷取的位元組通過size指定,預設為當前檔案位置。

wirte(str)

將字串寫入檔案,返回的是寫入的字元長度。

writelines(sequence)

向檔案寫入乙個序列字串列表,如果需要換行則要自己加入每行的換行符。

可以使用os.path模組進行路徑及檔名操作

import os

path='./測試檔案.txt'

#檔名

print(os.path.basename(path))

#絕對路徑

print(os.path.abspath(path))

#是否為檔案

print(os.path.isfile(path))

#是否存在

print(os.path.exists(path))

os.path常用方法:

abspath(path)

返回絕對路徑

basename(path)

返回檔名

commonprefix(list)

返回list(多個路徑)中,所有path共有的最長的路徑

dirname(path)

返回檔案路徑

exists(path)

如果路徑 path 存在,返回 true;如果路徑 path 不存在,返回 false。

getatime(path)

返回最近訪問時間(浮點型秒數)

getmtime(path)

返回最近檔案修改時間

getctime(path)

返回檔案 path 建立時間

getsize(path)

返回檔案大小,如果檔案不存在就返回錯誤

isabs(path)

判斷是否為絕對路徑

isfile(path)

判斷路徑是否為檔案

isdir(path)

判斷路徑是否為目錄

islink(path)

判斷路徑是否為鏈結

ismount(path)

判斷路徑是否為掛載點

join(path1[, path2[, ...]])

把目錄和檔名合成乙個路徑

normcase(path)

轉換path的大小寫和斜槓

samefile(path1, path2)

判斷目錄或檔案是否相同

sameopenfile(fp1, fp2)

判斷fp1和fp2是否指向同一檔案

samestat(stat1, stat2)

判斷stat tuple stat1和stat2是否指向同乙個檔案

split(path)

把路徑分割成 dirname 和 basename,返回乙個元組

讀取文字的時候如果編碼不相容會拋異常,可以借助chardet模組判斷文字編碼。

#import codecs 編碼轉換

import os

import chardet

#如果安裝了anaconda,chardet就已經可用了。

#否則,需要自己pip install chardet

def detectcode(path):

with open(path, 'rb') as file:

data = file.read(2000) #最多2000個字元

dicts = chardet.detect(data)

return dicts

print(detectcode(file_path))

#輸出格式如

#confidence欄位為概率,最大為1.0

python 讀寫輸出編碼

經常在讀檔案的時候碰到亂碼就停止讀取,導致檔案讀取不完整 解決方法 利用模組,import codecs file codecs.open path,r 能解決部分問題 編碼常識 python中的字串有str和unicode兩種形式,兩者之間不能連線,也不能比較。漢字編碼,常見的有gbk和utf 8...

php檢測文字編碼的方法

前言 做phper經常要讀取excel檔案。有的excel是utf 8的,有的是gbk的。而我們的資料庫編碼也一樣,有的是utf 8的,有的是gbk的。要把這些excel中的資料讀取到資料庫中,就必須保證編碼是一致的。方法1 獲取當前字串的編碼 encode mb detect encoding s...

Python 讀寫文字(open)

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