文件操做

  之前總聽別人說,把文件改爲只讀模式,也常常在文件屬性中看到,是'只讀',今天終於瞭解到一些相關的文件操做python

模式

r    只讀
r+  讀+寫
w   覆蓋寫
w+   先覆蓋再寫,而後再讀
a   追加
a+   追加讀

    只讀: mode = "r""rb",讀文件r 讀字節rb

打開文件

  f = open('文件名',mode = 'r',encoding='utf-8')

參數1:文件的名字,(必須是字符串)  
參數mode:對這個文件的操做方式(模式)
參數encoding:    這個文件的編碼集
f 文件句柄.全部對於文件的操做,都是操做文件句柄

文件路徑: 

  絕對路徑: 從磁盤查找額就是絕對路徑
  相對路徑: 相對於某個文件的位置(推薦寫法)
  存放文件路徑也必須是字符串類型,所有替換雙斜槓,若是文件路徑過長,在路徑前加一個r,和\\同樣,都是轉義ide

讀操做

f.read( ) 讀, 一次性所有讀取;若是文件過大,就會很是佔用資源,致使內存崩潰
f.readline( )  讀取一行,可是尾部有一個\n(換行符);只用在讀的時候最後加一個strip()就能夠解決
f.readlines( ) 一行一行讀取,,讀取多行,都存放在列表裏
for循環讀    每一次循環只在內存中佔一行數據,很節省內存
f = open('t1',mode = 'r',encoding = 'utf-8')
  mode = 'r',只讀模式
  read(),括號裏的參數若是是單數,就表明讀取的字符數量,例如read(3),就是讀取前三個字 

f = open('t1',mode = 'rb')    
  mode = 'rb',    讀取字節時不能指定編碼集;    
      read(3)在當前模式下,是讀取三個字節
示例1

寫操做

  利用w 模式操做文件,若是文件不存在,就新建一個;mode = "w"或"wb" 寫文件: w 寫字節: wb (只寫,沒有讀的功能)編碼

  f.write("新內容"),覆蓋寫,在寫以前把文件清空spa

追加操做

  mode = 'a', 在文件的末尾位置添加內容code

r +    讀+寫
w +    寫+讀
a +    追加+讀
f = open('t1',mode = 'r+',encoding = 'utf-8')    先讀後寫
f = open('t1',mode = 'w+',encoding = 'utf-8')    先寫後讀

f.seek() 移動光標位置,先寫後讀時光標默認是在最後,讀取時須要把光標移動到最前面
例:blog

f = open('t1',mode = 'w+',encoding = 'utf-8')
f.write("寫的內容") f.seek( ) 移動光標位置 print(f.read())

f = open('t1',mode = 'a+',encoding= 'utf-8') 追加寫+讀
  f.seek(0)
  print(f.read())ip

f.write('')
..\ 返回上一級
f.flush() 刷新內存

上下文管理 with open

with open('文件路徑',mode = '模式',encoding = 'utf-8')as f:
  msg = f.read()
  print(msg) 不用手動關閉文件,操做完成以後自動關閉utf-8

其餘操做

  f.seek(),移動光標的位置
  f.tell(),查看光標的位置
  f.truncate(),截取,指定光標的位置進行截取,按字節進行計算
  with open("文件路徑",mode = '模式',encoding='utf-8')as f:
  pirnt(f.read())
  print(f.tell()) tell 查看光標的位置,數的是字節
  with open("文件路徑",mode='模式',encoding='utf-8')as f:
  f.trunca(9),截取9個字節,也就是3個字符,在python3中,要先手動移動光標,再進行 截取資源

seek參數:

雙數字:0,0文件的頭部;0,1光標當前的位置;0,2文件尾部
單數字:數字表示的是字節
os模式:
os.rename("舊的名字","新的名字")
os.remove("要刪除的文件")

文件修改,要先作備份


with open("文件路徑",mode= '模式',encoding='編碼集')as f,\
open("文件路徑",mode='模式',encoding='編碼集')as f1:
  f:原文件的句柄
  f1:新文件的句柄
  msg = f.read() 讀取原文件的內容,臨時存到msg變量中
  s = msg.replace('被修改的內容','修改後的內容')
  f1.write(s) 將修改的內容寫到新的文件中, 原文件不動
ps:有一個弊端,當文件太大的時候,內存很容易溢出,須要用for循環

with open('文件路徑',mode='模式',encoding='utf-8')as f,\
open('文件路徑',mode='模式',encoding='utf-8')as f1:
  for i in f:                   #一行一行的讀取
  msg = i.strip().replace("舊內容","新內容")
  f1.write(msg)                #將每行內容寫入到新的文件中

相關文章
相關標籤/搜索