1. 程式人生 > >python檔案的開啟與修改——day9

python檔案的開啟與修改——day9

一. 基本介紹
  控制檔案讀寫操作的模式
  r(預設)
  w
  a

  控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)
  t(預設)
  b
  控制檔案讀寫操作的模式

二.詳細介紹
  1. r(預設):只讀模式,以該模式開啟檔案,當檔案不存在時則報錯,當檔案存在時檔案指標在檔案開頭
    with open('a.txt',mode='rt',encoding='utf-8') as f:
    print(f.readline()) #讀取檔案中的第一行
    print(f.readline2()) #讀取檔案左右資訊,轉成列表模式
  1.1 換行符
    print(line,end='')

#預設只帶換行,如果不需要換行加end=''

  2. w:只寫模式,以該模式開啟檔案,當檔案不存在時建立一個空文件,當檔案存在時清空檔案內容檔案指標在檔案開頭。
    with open('a.txt',mode='wt',encoding='utf-8') as f:

    print(f.readable()) #判斷檔案是否可讀
    print(f.writable()) #判斷檔案是否可寫

  2.1 在開啟檔案不關閉的情況下,連續的寫入,新的內容總是跟在老內容之後
    f.write('你瞅啥\n')
    f.write('瞅你那熊樣\n')
    f.write('巴拉巴拉。。。\n')

  2.2 列表內容迴圈新增入檔案中
    lines=['1111\n','2222\n','3333\n']
    f.writelines(lines) #列表內容迴圈新增入檔案中

  3. 只追加寫入模式,以改模式開啟檔案,當檔案不存在時建立一個空文件,當檔案存在時不清空檔案內容,檔案指標跳到檔案末尾。
    with open('c.txt',mode='at',encoding='utf-8') as f:
    f.write('要新增的內容\n')

  4. 控制檔案讀寫內容的模式(不能單獨使用,必須與r、w、a連用)
    t(預設):無論讀寫都是以字元為單位,只能操作文字檔案,必須制定encoding引數
    b:無論讀寫都是以bytes(位元組)為單位,可以操作所有檔案,一定不能制定encoding引數
    with open('01.mp4',mode='rb') as f:

    with open('a.txt',mode='wb') as f:
    f.write('輸入的內容'.encode('utf-8')) #要在b模式下修改txt檔案必須加.encode('utf-8')

  5.
    +:不能單獨使用,必須與rwa連用,r+、w+、a+
    with open('a.txt','r+t',encoding='utf-8') as f:
    print(f.readable()) #這時檔案可以讀也可以寫
    print(f.writable())

  6. 檔案修改的兩種方式

    6.1  (1)以讀的方式開啟原始檔
      (2)將檔案內容一次性全讀入記憶體,在記憶體完場修改
      (3)以寫的方式開啟原始檔,然後將修改的結果一次性寫入原始檔
       總結:
        優點:在檔案修改過程中硬碟只存在一份資料
        缺點:浪費記憶體

            with open('b.txt',mode='rt',encoding='utf-8') as f1: #從檔案中值取出付給f1
            msg=f1.read() #把f1取的值賦給msg
            new_msg=msg.replace('alex','大SB') #把msg的alex該為大SB 付給new_msg
            with open('b.txt',mode='wt',encoding='utf-8') as f2:
            f2.write(new_msg) #把new_msg的值寫到檔案裡

    6.2  (1)以讀的方式開啟原始檔,以寫的方式開啟一個臨時檔案
      (2)讀取原始檔的一行內容到記憶體中,將修改的結果寫入臨時檔案
      (3)刪除原始檔,將臨時檔案從命名為原始檔名
        優點:同一時間在記憶體中只有檔案的一行內容,更節省記憶體
        缺點:在檔案修改過程中硬碟只存在兩份資料

            import os #import 呼叫模組 功能集合體 os
            with open('b.txt',mode='rt',encoding='utf-8') as read_f,\
            open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f:
            for line in read_f:
            write_f.write(line.replace('大SB','alex'))
            os.remove('b.txt') #刪除原始檔
            os.rename('.b.txt.swap','b.txt') #修改檔名

瞭解
    f.seek(10) #.seek 移動游標到 10 bytes
    f.write('你好啊') #輸入你好啊
    #注意:如果是中文要佔3個位元組 就可能出現亂碼