Python文件讀寫


Python中打開文件命令 open(),open命令返回文件的一個句柄:如:
f = open('e:\\123.txt')

# read()對打開的文件進行讀的操作
print(f.read())

# 關閉文件,文件打開后一定要記得關閉文件。在寫的時候 可以:打開,關閉先寫完,再寫打開和關閉中間的代碼
 f.close()
 
        
f = open('e:\\123.txt') 
#這段代碼,open 沒有指定 mode= 參數,默認使用只讀的方式打開文件,文件沒有寫的權限
f = open('e:\\123.txt')
f.write('hello python')
f.close()
上面的代碼會報錯  io.UnsupportedOperation: not writable

另外,如果沒有使用為open指定 encoding= 參數,計算機默認使用系統的編碼方式打開文件。windows下默認為 gbk, linux下默認為utf-8
文件的打開方式格式: 文件句柄 = open('文件路徑',打開模式, 編碼方式)
文件打開方式:
1.r, 只讀的方式打開(文件必須存在,如果文件不存在,則會拋出異常) 注:文件以什么方式編碼方式寫的,就以什么編碼方式打開
f = open('e:\\123.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()

2.w, 只寫模式 (文件不可讀,如果文件不存在,則創建一個新的文件,如果文件存在,則會清空里面的內容)
f = open('e:\\123.txt',mode='w',encoding='utf-8')
f.write('hello python!') # 在寫的時候,要指定編碼的方式
f.close()

3.a,只追加寫的模式 (文件不可讀,不存在則創建新的文件,文件存在的話,可在后面追加內容)
f = open('e:\\123.txt',mode='a',encoding='utf-8')
f.write('jack is a student')
f.close()

對於非文本的文件,使用b的模式。'b'表示以字節的方式進行操作 如:rb,wb,ab 分別對應以上內容,如果以b的方式打開,讀取到的內容是字節類型,寫入的時候也需要提供字節類型,不能指定編碼

f = open('e:\\123.txt',mode='rb') # 指定encoding= 參數 會報錯
print(f.read())  # b'\xd6\xd0\xb9\xfa
f.close()
以上代碼 輸出:b'\xd6\xd0\xb9\xfa'  如果在寫的模式下,寫的時候也要以字節的方式進行寫

'+'模式 ---- r+: 讀寫模式 w+:寫讀模式 a+:寫讀模式
f = open('e:\\123.txt',mode='r+',encoding='gbk')
print(f.read())
f.write('helo')
print(f.read()) # 此處在讀的時候,就讀不到 后面的 hello了,因為,在執行完 write(’hello') 這段代碼后,光標移動到了文件的末尾
f.close()
在 r+ 模式下,應該先讀,后寫,如果先寫,后讀,同樣的道理,光標移動到了文件末尾,將讀取不到內容

f = open('e:\\123.txt',mode='w+',encoding='gbk')
f.write('你好,hellopython')  # 清空文件中的內容,然后重新寫數據
f.seek(0)  # 將光標移動到文件開頭
print(f.read())
f.close()
f = open('e:\\123.txt',mode='a+',encoding='gbk')  # 在 a+ 模式下,將在文件的末尾追加數據,不會覆蓋原來的內容
f.write('\njack is a student')
f.seek(0)  # 將光標移動到文件開頭
print(f.read())
f.close()

文件讀取的其他操作
很多時候,在讀寫文件的時候,只是打開文件,open 而忘記關閉文件,close,可以使用簡單的方式來操作,使用with open。如:
l1 = ['靜夜思','李白','床前明月光','疑是地上霜','舉頭望明月','低頭思故鄉']
with open('e:\\靜夜思.txt',mode='w+',encoding='utf-8') as f:
     for l1_data in l1:
         f.write(l1_data + '\n')    # f.writelines(l1) 可以將列表l1中的內容全部寫進去,但是不換行

     f.seek(0)  # 將光標放到文件首
     print(f.readlines()) # 逐行讀取文件,並將文件按行為元素保存到一個列表中
     f.seek(3)
     index = f.tell() # 獲取當前光標的位置
     print(index)  # 打印 3
關於seek 和 tell 這兩個函數
with open('e:\\123.txt',mode='w+',encoding='utf-8') as f:
    f.write('abcdefgh')  # 一共 8 個字符,現在想要讀取ef兩個字符
    f.seek(4)  # 將光標移動到4的位置,也就是 d 的后面,從e開始讀取
    index = f.tell() #獲取光標位置
    print(f.read(2),index) # 讀取兩個字符,將讀到 ef
 
        
with open('e:\\123.txt',mode='w+',encoding='utf-8') as f:
    f.write('中國一定強')  # 在文件中寫入: 中國一定強  按照 utf-8的編碼方式寫入
    f.seek(6)   # 將光標移動到位置 6
    index = f.tell()  # 讀取光標的位置
    print(f.read(2),index)  # 讀取兩個字符

以上代碼 輸出 :一定 6
這里需要注意的是:移動光標 seek 以及 讀取光標位置 tell 這兩個函數,如果是英文字母。則一個字符為一個位置,如果是其他,按照編碼方式來指定或者獲取位置
中文 utf-8 的編碼方式,一個漢字占用 3 個字節,所以 '中國'占用6個位置 在移動光標,或者獲取光標位置的時候 要三個三個的移動
read 在讀取的時候,按照能用眼睛看到的最小單位來讀取


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM