1. 程式人生 > 實用技巧 >Python基本語法 開啟檔案

Python基本語法 開啟檔案

開啟檔案的操作

資料是寫在檔案裡面的,open file 可以實現 讀取資料 寫入資料

一般的檔案操作步驟:

  1. 先開啟檔案
  2. 讀取檔案資料
  3. 寫入資料
  4. 關閉檔案

注意:檔案開啟後,最後一定要記得關閉檔案,否則會引起很多問題

1.開啟檔案,使用的方法為open() 內建函式

f=open('檔名稱/檔案路徑')

2.讀取檔案:

f.read() 就可以讀取檔案所有資料(讀取的資料型別為字串)

讀取的方法有:

mode='r' 讀取模式 (一般預設的模式為:讀取模式) 所以,如果是進行檔案讀取,可以預設不傳,但是前提必須是,讀取時,檔案必須存在,否則會報錯

mode='rb' 也是讀取模式,不過一般是以二進位制格式開啟一個檔案,用於讀寫。一般用於非文字檔案,例如圖片

#開啟檔案
f = open('python_test.txt')#如果你讀取的是同一個資料夾下,不需要加路徑,不同檔案下,需要加上詳細的路徑資訊
#讀取資料
data = f.read()#read 讀取出來的資料是字串
print(data)
print(type(data))  #開啟檔案讀取出來的資料為字串型別
#關閉檔案 f.close()

輸出結果為:
<class 'str'>

如果想將返回的字串資料,存放在一個列表裡面,方便後續處理,可以使用之前字串的一個方法,split() 分割

split() 內建函式返回的結果為,字串列表(分割後的引數為字串形式,儲存在列表內)----可以自行實踐

new_data = data.split('\n') #將返回的字串以換行符進行切割儲存
print(new_data)

3.寫入檔案

檔案不存在(就是在一個新的檔案裡面,寫入需要寫入的資料)

  • mode='w' 覆蓋模式
    • 在w模式下,如果之前沒有這個檔案,將會在傳入的路徑下建立一個新的檔案
      #使用預設的mode='r'模式
      file=open('data.txt')    #執行會報錯
      
      #使用mode='w'模式,寫入除中文以外的字元,可以使用
      file=open('data.txt',mode='w')#可以在當前路徑下建立一個新的檔案;data.txt
      
      
      #如果要在檔案裡面寫入中文,需要設定編碼格式     encoding
      =utf-8,否則會亂碼 file = open('new_file.txt','w',encoding= 'utf-8')#新增編碼格式encoding='utf-8' #寫入資料 file.write('這是一篇很好的文章') #關閉檔案 file.close()

    • 使用格式說明
    1. 使用open()內建函式開啟檔案,進行操作的過程中,不需要傳入關鍵字mode,只需要傳入對應的讀取模式就行
    2. 原因是:open函式的原始碼部分,傳入的引數位置:def open(file,mode ='r',buffering = None,encoding = None,......)
    3. 其中,mode為第二個位置引數,所以可以不用寫,但是其他的需要傳入,不然會報錯,例如,常用的encoding位置引數

注意事項:如果之前已經存在相同名稱的檔案,使用mode='w'模式,會覆蓋之前的檔案內用,所以使用時需要很謹慎

  • 如何解決被覆蓋的問題
    • mode='a' 追加模式
    • 在a模式下,如果之前不存在的檔案,會建立新的檔案,且在每執行一次後,將新寫入的內容追加到文件的最後位置
    • mode='b' 二進位制模式 不能單獨使用,要跟r,w組合使用,其中,圖片就是的使用二進位制開啟和儲存的
      file = open('你好.png',mode='rb')
      #讀資料
      print(file.read())#打印出一串16進位制的數字
      #關閉檔案
      file.close()

    • mode='t' 文字模式 上面說的mode='r',實際上就是mode='rt',因為預設都是用txt開啟
    • mode='+' 加模式 組合使用 r+ :可讀可寫,其中可寫為追加模式
      file = open('new_file.txt',mode='r+',encoding= 'utf-8')
      file.read()#先讀
      #寫入資料
      file.write('這是一本很有意思的書')#再寫
      #關閉檔案
      file.close()

4.檔案的操作之 seek

seek:表示游標在哪裡

  • 開啟一個檔案時,游標在最開始的位置
  • 開啟一個檔案,w+的模式寫入一些資料,但是沒有關閉檔案。再次讀取時,不會讀取到資料,因為此時的游標在最末尾(所以,一定要注意,開啟檔案,操作完成後,一定要關閉檔案,再進行下一步操作
  • #此操作讀取不到檔案資料
    f = open('demo.txt','w+')#'w+'可以同時具備可讀可寫能力
    f.write('new line')
    print(f.read())
    #開啟檔案,操作完成後,關閉檔案,再開啟操作,就可以讀取到最新資料
    f = open('demo.txt','w+')
    f.write('new line')
    f.close()
    f = open('demo.txt','r')
    print(f.read())
    #結果:new line

5.readlines 讀取每一行,會存放在列表當中,每一行的資料就是列表的一個元素

reed 讀取的資料是一整個字串

#使用read()  讀取全部資料
file=open('data.txt',encoding='utf-8')
data=file.read()
print(data)
print(type(data))

輸出結果:
這是第一行內容
這是第二行內容
這是第三行內容
<class 'str'>


#使用readlines()  讀取資料
data1=file.readlines()
print(data1)
print(type(data1))

輸出結果:
['這是第一行內容\n', '這是第二行內容\n', '這是第三行內容']
<class 'list'>

readlines() 方法取出的資料為字串,且儲存在列表當中,且字串末尾存在一個換行符,如果想要將返回的資料取出換行符,可以使用for迴圈進行遍歷,取出每個字串,然後使用字串的strip() 方法,去除字串首尾空格或者是換行符

方法二:使用enumerate() 方法 (可以多多瞭解,工作當中很實用)

file=open('data.txt',encoding='utf-8')

data1=file.readlines()
print(data1)
print(type(data1))
for line,data in enumerate(data1):
    if line == len(data1)-1:
        print(data)    #根據資料對應的下標位置,獲取對應資料
    else:
        print(data[:-1])

輸出結果:
這是第一行內容
這是第二行內容
這是第三行內容

6.with語句:可以讓我們節省關閉檔案的操作

首先,工作當中,我們經常遇到一些任務,可能事先需要設定,事後再做清理的工作。對於這種場景,Python的with語句提供了一個非常方便的處理方式。一個很好的例子就是檔案處理,你需要獲取一個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼(此方法就是防止,書寫過程中,忘記關閉檔案,而導致報錯)

with語句的語法:

with open(file) as filename:

使用方法:

with open('data.txt') as f:

data= f.read()

data1=f.readlines()