(因為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...