1. 程式人生 > >python基礎之文件操作

python基礎之文件操作

解碼 app con codeing 讀一行 只讀 [1] 四種 操作系統

文件操作首先做的是,打開文件,打開文件有兩種方法open(...) 和 file(...),本質上前者在內部會調用後者來進行文件操作,但是一般都用open()

操作文件包括了文件的讀、寫和關閉,首先來談談打開方式:當我們執行 文件句柄 = open(‘文件路徑‘, ‘模式‘)操作的時候,要傳遞給open方法一個表示模式的參數:

來段代碼演示一下

f = open(\d:..,mode=‘r‘,‘encodeing=utf-8‘) #文件句柄 = open(‘文件路徑‘, ‘模式‘) 路徑分為相對路徑和絕對路徑

打開文件的模式有:

  • r,只讀模式(默認)。
  • w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
  • a,追加模式。【可讀; 不存在則創建;存在則只追加內容;】

"+" 表示可以同時讀寫某個文件

  • r+,可讀寫文件。【可讀;可寫;可追加】
  • w+,先寫再讀。【這個方法打開文件會清空原本文件中的所有內容,將新的內容寫進去,之後也可讀取已經寫入的內容】
  • a+,同a

"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (註意:只能與 r 或 r+ 模式同使用)

  • rU
  • r+U
  • rbU
  • rb+U

"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)

  • rb
  • wb
  • ab
#用rb打開不需要編碼解碼,用在非文字的讀寫
# f = open(‘d\作品\模特主婦護士班主任‘,mode=‘r‘)
# content = f.read()
# print(content)
# f.close()
#
#只寫 對於W,沒有此文件就會創建
# f = open(‘log‘,mode=‘w‘,encoding=‘utf-8‘)
# f.write(‘騎兵步兵‘)
# f.close()

#先將源文件內容全部清除,再寫
# f = open(‘log‘,mode=‘w‘,encoding=‘utf-8‘)
# f.write(‘高清‘)
# f.close()
# f = open(‘log‘,mode=‘wb‘)
# f.write(‘劇情‘.encode(‘utf-8‘)) #endode後面跟的是所用軟件默認的編碼方式,否則會報錯
# f.close()


#追加 r,rb
# f = open(‘log‘,mode=‘a‘,encoding=‘utf-8‘)
# f.write(‘佳琪‘)
# f.close()

#追加寫
#f = open(‘log‘,mode=‘ab‘)
# f.write(‘佳琪‘.encode(‘utf-8‘))
# f.close()

#讀寫
# f = open(‘log‘,mode=‘r+‘,encoding=‘utf-8‘)
# f.write(‘佳琪‘)
# print(f.read())
# f.close()

#讀寫的bytes類型,r+b也是讀寫,但是是以bytes類型,最常用r+
# f = open(‘log‘,mode=‘r+b‘)
# print(f.read())
# f.write(‘佳琪‘.encode(‘utf-8‘))
# print(f.read())
# f.close()

#w+寫讀,只要有w都是先清除再寫
# f = open(‘log‘,mode=‘w+‘,encoding=‘utf-8‘)
# f.write(‘佳琪‘)
# print(f.read())
# f.close()
# f = open(‘log‘,mode=‘w+‘,encoding=‘utf-8‘)
# f.write(‘佳琪‘)
# print(f.read())
# f.close()

#功能詳解 read(這裏放數字,放幾就按照想要讀取的文件(字符)最小單位讀取)
# f = open(‘log‘,mode=‘w+‘,encoding=‘utf-8‘)
# countent = f.read(2)
# print(countent)

#斷點續傳***** tell告訴你光標的位置,然後再seek把光標調到這個位置就可以實現斷點續傳


#f.readline()一行一行讀,只能讀第一行,想讀下面就調光標
#f。readlines()每一行當成列表中的一個元素,添加到列表中
#f.truncate(這裏填截取的數字)在原文件文件截取


#open打開文件是依賴了操作系統的提供的途徑
#操作系統有自己的編碼,open在打開文件的時候默認使用操作系統的編碼
#win gbk mac/linux utf-8

#習慣叫 f file f_obj f_handler fh
# print(f.writable()) #判斷文件是否可寫
# print(f.readable()) #判斷文件是否可讀
# f.write(‘7018201890‘) #寫文件的時候需要寫數字,需要把數字轉換成字符串
# f.write(‘aasjgdlwhoojfjdaj‘)
# f.write(‘iq349jdsh\n‘)
# f.write(‘aks‘)
# f.write(‘\nsdgawo‘) #文件的換行
# f.write(‘誌強德勝‘) #utf-8 unicode gbk
f.close()


#找到文件詳解:文件與py的執行文件在相同路徑下,直接用文件的名字就可以打開文件
#文件與py的執行文件不在相同路徑下,用絕對路徑找到文件
#文件的路徑,需要用取消轉譯的方式來表示:1.\\ 2.r‘‘
#如果以寫文件的方式打開一個文件,那麽不存在的文件會被創建,存在的文件之前的內容會被清空
‘ \\n‘
f = open(r‘C:\Users\Administrator\Desktop\s8_tmp.txt‘,‘w‘,encoding=‘utf-8‘) #文件路徑、操作模式、編碼
f.write(‘哈哈哈‘)
f.close()

#關閉文件詳解
#操作系統級別的關閉文件資源:f.close() 必須寫
#del f主動釋放了一個python程序內存中的變量 可寫可不寫

#1.讀文件的第一種方式:read方法,用read方法會一次性的讀出文件中的所有內容
2.讀一部分內容:read(n),指定讀n個單位
#3.讀文件的第三種方式:按照行讀,每次執行readline就會往下讀一行
# content = f.readline()
#5.讀:最常用
f = open(‘歌詞‘,encoding=‘utf-8‘)
for l in f:
print(l.strip())


f = open(‘shoplist‘,encoding=‘utf-8‘) #讀文件並整理成需要的數據類型
goods_list = []
for line in f:
if line.strip():
goods_dic = {‘name‘:None,‘price‘:None}
line = line.strip()
goods_lst = line.split()
print(goods_lst)
goods_dic[‘name‘] = goods_lst[0]
goods_dic[‘price‘] = goods_lst[1]
goods_list.append(goods_dic)
print(goods_list)
f.close()

# f = open(‘shoplist‘,encoding=‘utf-8‘) #只顯示文件中有內容的行
# goods_list = []
# for line in f:
# if line.strip():
# print(line.strip())
# f.close()

# f = open(‘歌詞‘,‘rb‘)
# f.close()
#b:圖片、音樂、視頻等任何文件
#傳輸:上傳、下載
#網絡編程:

#修改文件的編碼——非常不重要,不重要程度五顆星
#utf-8 用utf8的方式打開一個文件
#讀文件裏的內容str
#將讀出來的內容轉換成gbk
#以gbk的方式打開另一個文件
#寫入


#a+
# f = open(‘shoplist‘,‘a+‘,encoding=‘utf-8‘)
# print(f.readable())
# f.write(‘\ncomputer 6000 5‘)
# f.write(‘\ncomputer 6000 5‘)
# f.write(‘\ncomputer 6000 5‘)
# f.write(‘\ncomputer 6000 5‘)
# f.close()


#1.被動接受知識 - 主動提出問題
#2.主動的找到問題,並且找到對應的解決方法
#3.主動的學習

# r+ 可讀可寫:
#1.先讀後寫:寫是追寫
#2.先寫後讀:從頭開始寫
# f = open(‘歌詞‘,‘r+‘,encoding=‘utf-8‘)
# line = f.readline()
# print(line)
# f.write(‘0000‘)
# f.close()
# w+ 可寫可讀:一上來文件就清空了,
# 盡管可讀:1.但是你讀出來的內容是你這次打開文件新寫入的
# 2.光標在最後,需要主動移動光標才可讀
# f = open(‘歌詞‘,‘w+‘,encoding=‘utf-8‘)
# f.write(‘abc\n‘)
# f.write(‘及哈哈哈‘)
# f.seek(0)
# print(f.read())
# f.close()
# a+ 追加可讀
# f = open(‘歌詞‘,‘a+‘,encoding=‘utf-8‘)
# f.write(‘\nqq星‘)
# f.seek(0)
# print(f.read())
# f.close()


#一般情況下:文件操作,要麽讀,要麽寫,很少會用到讀寫、寫讀同時用的
#常用的:
#r、w、a
#rb、wb、ab,不需要指定編碼了
#
# f = open(‘歌詞‘,‘rb‘)
# content = f.read()
# f.close()
# print(content)
# f2 = open(‘歌詞2‘,‘wb‘)
# f2.write(content)
# f2.close()


# print(‘readline : ‘,content.strip()) #strip去掉空格、制表符、換行符
# content2 = f.readline()
# print(content2.strip())
#4.讀文件的第四種方式:readlines,返回一個列表,將文件中的每一行作為列表中的每一項返回一個列表

f = open(‘歌詞‘,‘r+‘,encoding=‘utf-8‘)
#seek 光標移動到第幾個字節的位置
# f.seek(0) 移動到最開始
# f.seek(0,2) 移動到最末尾
f.truncate(3) #從文件開始的位置只保留指定字節的內容
# f.write(‘我可寫了啊‘)
#tell 告訴我光標在第幾個字節
#seek移動光標到指定位置
# content = f.readline()
# print(content.strip())
#tell告訴你當前光標所在的位置
# print(f.tell())
# f.seek(4) #光標移動到三個字節的地方‘\r\n’
# content = f.read(1) #讀一個字符
# print(‘***‘,content,‘***‘)
# content = f.readline()
# print(content.strip())
# print(f.tell())
f.close()



#tell
#seek:去最開始、去最結尾
#truncate:保留n個字節

技術分享圖片

技術分享圖片

python基礎之文件操作