python學習05-文件操作
阿新 • • 發佈:2018-02-15
print 內存 文件句柄 file 創建 一行 進制 移動 ()
文件操作分為讀、寫、修改,以什麽模式存文件,就以什麽模式編碼打開文件。
打開文件的模式有:
- r,只讀模式(默認)。
# 以什麽模式存文件,就以什麽模式編碼打開文件 # 示例一:r是文本只讀模式 f = open(file=‘D:/工作/兼職聯系信息.txt‘,mode=‘r‘,encoding=‘utf-8‘) # 絕對路徑訪問 data = f.read() f.close() # 示例二:rb:二進制只讀模式,無法指定encoding,因為在該模式下數據讀到內存裏直接是bytes格式,如要查看內容還需手動decode f = open(file=‘兼職聯系信息.txt‘, mode=‘rb‘)
- w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
# w模式是創建新文件,如果文件存在則清空重寫 f = open(file=‘兼職.txt‘,mode=‘w‘,encoding=‘gbk‘) f.write(‘美女按摩服務,電話號:adfs123‘) f.close()
- a,追加模式。【可讀; 不存在則創建;存在則只追加內容;】
# a是追加模式 f = open(‘兼職聯系信息.txt‘, ‘ab‘) f.write("\n白百何 北京 167 55 13523230322".encode("gbk")) # 換行追加 f.close()
"+" 表示可以同時讀寫某個文件
- r+,可讀寫文件。【可讀;可寫;可追加】
f = open(‘兼職聯系信息.txt‘,‘r+‘,encoding="gbk") data = f.read() print("content",data) f.write("\nnewline 1老師") f.write("\nnewline 2老師") f.write("\nnewline 3老師") f.write("\nnewline 4老師") print("new content", f.read()) # read不到結果,因為寫入後光標已經移到末尾 f.close()
- w+,寫讀
# 寫讀是以創建的模式打開(將原來的東西覆蓋),可以讀取寫入的內容 f = open("兼職聯系信息.txt",‘w+‘,encoding="gbk") data = f.read() print("content", data) f.write("\nnewline 1學生") f.write("\nnewline 2學生") f.write("\nnewline 3學生") f.write("\nnewline 4學生") print("new content",f.read()) f.close()
- a+,同a
"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)
- rb
# rb:二進制只讀模式,無法指定encoding,因為在該模式下數據讀到內存裏直接是bytes格式,如要查看內容還需手動decode f = open(file=‘兼職聯系信息.txt‘, mode=‘rb‘)
- wb
f = open(‘兼職2.txt‘,‘wb‘) # 寫二進制 f.write("美女陪聊!".encode("gbk")) f.close()
- ab
f = open(‘兼職聯系信息.txt‘, ‘ab‘) f.write("\n白百何 北京 167 55 13523230322".encode("gbk")) # 換行追加 f.close()
文件操作
f = open("兼職.txt",mode="r+",encoding="gbk") f.fileno() # 返回文件句柄在內核中的索引值,做IO多路復用可以用到 f.flush() # 把文件從內存buffer裏強制刷新到硬盤 f.readable() # 判斷是否可讀 f.readline() # 只讀一行,遇到\r \n 為止 f.seek() # 把操作文件的光標移到指定位置(按字節) f.seek(0) # 光標移動到文首 f.seekable() # 判斷文件是否可進行seek操作 f.tell() # 返回當前文件操作光標位置(按字節) f.truncate() # 按指定長度截斷文件(需要寫權限),從光標當前位置開始往後截斷 f.truncate(6) # 加上數字是從頭開始截取6位字節 f.writable() # 判斷文件是否可寫 f.read() # 按字符,註意和tell和seek的區別
文件修改
# 修改文件時,先移動光標到指定位置,向文件寫入內容 f = open(file = ‘兼職模特聯系方式.txt‘,mode=‘a‘,encoding=‘gbk‘) f.write("安琪 170 50 13988888") f.write("白雪 167 48 13324434") f.write("劉琳 166 46 13828382") f.seek(22) # 移動光標到指定位置插入文件 f.write("\n") f.seek(42) f.write("\n") f.seek(62) f.write("\n") f.seek(0) f.read() f.close()
文件修改時占有硬盤,減少內存使用
mport os f_name = "兼職模特聯系方式.txt" f_new_name = "%s.new" %f_name old_str = "白雪" new_str = "白百合" f = open(f_name,mode=‘r‘,encoding=‘utf-8‘) f_new = open(f_new_name,‘w‘,encoding=‘utf-8‘) for line in f: if old_str in line: line = line.replace(old_str,new_str) f_new.write(line) f.close() f_new.close() os.rename(f_new_name,f_name) # 新文件替代舊文件
python學習05-文件操作