Python3.5中闷营,open()不同模式如r、r+ 续担、w+擅耽、w、a物遇、a+有何不同乖仇?
r 只能讀
r+ 可讀可寫 不會(huì)創(chuàng)建不存在的文件 從頂部開始寫 會(huì)覆蓋之前此位置的內(nèi)容
w+ 可讀可寫 如果文件存在 則覆蓋整個(gè)文件不存在則創(chuàng)建
w 只能寫 覆蓋整個(gè)文件 不存在則創(chuàng)建
a 只能寫 從文件底部添加內(nèi)容 不存在則創(chuàng)建
a+ 可讀可寫 從文件頂部讀取內(nèi)容 從文件底部添加內(nèi)容 不存在則創(chuàng)建
但是實(shí)驗(yàn)發(fā)現(xiàn),==這里的r+ 可讀可寫 不會(huì)創(chuàng)建不存在的文件 從頂部開始寫 會(huì)覆蓋之前此位置的內(nèi)容==不完整询兴。
r+可讀可寫乃沙,不會(huì)創(chuàng)建不存在的文件。如果直接寫文件蕉朵,則從頂部開始寫崔涂,覆蓋之前此位置的內(nèi)容,如果先讀后寫始衅,則會(huì)在文件最后追加內(nèi)容冷蚂。
test.in的內(nèi)容:
hello1
ok2
byebye3
執(zhí)行以下:
with open("test.in", 'r+')as f:
f.readline()
f.write("addition")
文件的內(nèi)容變成了:
hello1
ok2
byebye3
addition
而:
with open("test.in", 'r+')as f:
f.write("addition")
文件內(nèi)容則變成了:
additionk2
byebye3
因此,正確的表述應(yīng)為:
r+可讀可寫汛闸,不會(huì)創(chuàng)建不存在的文件蝙茶。如果直接寫文件,則從頂部開始寫诸老,覆蓋之前此位置的內(nèi)容隆夯,如果先讀后寫,則會(huì)在文件最后追加內(nèi)容别伏。
附 python os.path模塊
os.path.abspath(path) #返回絕對(duì)路徑
os.path.basename(path) #返回文件名
os.path.commonprefix(list) #返回list(多個(gè)路徑)中蹄衷,所有path共有的最長(zhǎng)的路徑。
os.path.dirname(path) #返回文件路徑
os.path.exists(path) #路徑存在則返回True,路徑損壞返回False
os.path.lexists #路徑存在則返回True,路徑損壞也返回True
os.path.expanduser(path) #把path中包含的"~"和"~user"轉(zhuǎn)換成用戶目錄
os.path.expandvars(path) #根據(jù)環(huán)境變量的值替換path中包含的”$name”和”${name}”
os.path.getatime(path) #返回最后一次進(jìn)入此path的時(shí)間厘肮。
os.path.getmtime(path) #返回在此path下最后一次修改的時(shí)間愧口。
os.path.getctime(path) #返回path的大小
os.path.getsize(path) #返回文件大小,如果文件不存在就返回錯(cuò)誤
os.path.isabs(path) #判斷是否為絕對(duì)路徑
os.path.isfile(path) #判斷路徑是否為文件
os.path.isdir(path) #判斷路徑是否為目錄
os.path.islink(path) #判斷路徑是否為鏈接
os.path.ismount(path) #判斷路徑是否為掛載點(diǎn)()
os.path.join(path1[, path2[, ...]]) #把目錄和文件名合成一個(gè)路徑
os.path.normcase(path) #轉(zhuǎn)換path的大小寫和斜杠
os.path.normpath(path) #規(guī)范path字符串形式
os.path.realpath(path) #返回path的真實(shí)路徑
os.path.relpath(path[, start]) #從start開始計(jì)算相對(duì)路徑
os.path.samefile(path1, path2) #判斷目錄或文件是否相同
os.path.sameopenfile(fp1, fp2) #判斷fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2) #判斷stat tuple stat1和stat2是否指向同一個(gè)文件
os.path.split(path) #把路徑分割成dirname和basename类茂,返回一個(gè)元組
os.path.splitdrive(path) #一般用在windows下耍属,返回驅(qū)動(dòng)器名和路徑組成的元組
os.path.splitext(path) #分割路徑托嚣,返回路徑名和文件擴(kuò)展名的元組
os.path.splitunc(path) #把路徑分割為加載點(diǎn)與文件
os.path.walk(path, visit, arg) #遍歷path,進(jìn)入每個(gè)目錄都調(diào)用visit函數(shù)厚骗,visit函數(shù)必須有
3個(gè)參數(shù)(arg, dirname, names)示启,dirname表示當(dāng)前目錄的目錄名,names代表當(dāng)前目錄下的所有
文件名领舰,args則為walk的第三個(gè)參數(shù)
os.path.supports_unicode_filenames #設(shè)置是否支持unicode路徑名