網站首頁 編程語言 正文
上一章節 我們學習了如何利用 open() 函數創建一個文件,以及如何在文件內寫入內容;今天我們就來了解一下如何將文件中的內容讀取出去來的方法。
文件讀取的模式
模式 | 介紹 |
---|---|
r (read 的縮寫) | 讀取文件(返回的是字符串類型) |
rb | 二進制形式讀取文件 |
注意:我們接觸文件的寫入與讀取都是使用的 字符串 類型,那么 集合、元組、列表等就不能寫入了么?嚴格來說是不可以的,但是我們可以進行數據類型轉換轉為字符串呀 。寫入的時候轉為字符串類型,讀取的時候再轉為原來的數據類型即可。?嘿嘿嘿…
文件對象的讀取方法
方法名 | 參數 | 介紹 | 舉例 |
---|---|---|---|
read | 無 | 將文件內容一次性全部獨取出來,返回整個整個文件的字符串 | f.read() |
readlines | 無 | 將文件內容的每一行內容切割成列表讀取,返回文件列表 | f.readlines() |
readline | 無 | 將文件每一行內容進行讀取,一次返回一行,返回文件中的一行 | f.readline() |
mode | 無 | open()函數的 mode屬性,調用可返回當前文件模式 | f.mode() |
name | 無 | 返回文件名稱 | f.name() |
closed | 無 | 返回一個 bool 類型,調用 closed() 函數可以知道文件是否關閉 | f.closed() |
使用 read() 函數一次性讀取文件全部內容
注意:下文演示的 Terminal 終端是在 read_test.py 文件路徑啟動的 ipython 執行的。
這是我們讀取 事先創建好的 read_test.py 文件的腳本
import os.path current_path = os.getcwd() file = open('read_test.py', 'r') data = file.read() file.close() print(data) print('***************************') print(type(data))
read_test.py 文件內容如下
# coding:utf-8 import os.path current_path = os.getcwd() file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'w+', encoding='utf-8') file_test.write('人生苦短 我用Python') file_test.read() file_test.close()
Terminal終端 執行效果如下圖:
使用 readlines() 函數 讀取文件內容
繼續上面的腳本我們使用 readlines() 函數
file = open('read_test.py', 'r') data = file.readlines() file.close() print(data) print('***************************') print(type(data))
Terminal 終端 執行的效果如下圖:
注意:區別于 print(data) ,直接打印 data ,顯示效果如下:
這里我們發現每一行和空行都會有一個換行符,如果我們需要讀取、處理每一行的內容,空行與換行符會給我們造成很大的困擾。這里我們就可以利用到字符串的 strip() 函數加上 for 循環 就可以處理了。
_data = [] for i in data: temp = i.strip() if temp != '': _data.append(temp) _data # >>> 執行結果如下圖:
使用 readline() 函數 逐行讀取文件內容
上文我們提到 readline() 函數 會針對文件每一行內容進行讀取,一次返回一行;如果想要讀取下一行內容,就需要再一次執行 readline() 函數;下面我們來看一下 演示案例:
file = open('read_test.py', 'r') data = file.readline() data # >>> 執行結果如下: # >>> '# coding:utf-8\n' data = file.readline() data # >>> 執行結果如下: # >>> '\n'
如下圖:
mode()、name()、closed() 函數演示
見下圖:
文件讀取小實戰
還記得我們上一章節的文件的創建于寫入里面的實戰小案例么?今天我們就在上一章節的實戰小案例上進行一個補充,拓展一下我們關于讀取文件的功能(函數)
在進行 文件讀取小實戰之前,我們先來了解一下 wiht open() 函數,如下。
with open() 函數
前文我們了解到,如果想要讀取一個文件就需要先使用 open() 函數,打開文件并賦予其打開的模式,最后必須要要操作 close() 函數;這就是一個完整的讀取文件內容的一個步驟,但是這個步驟過于繁瑣不說,在文件不存在或者沒有執行 close() 函數的情況下,還會拋出一個IOError的錯誤,并且給出錯誤碼和詳細的信息告訴你文件不存在,示例如下:
每次如果都按照如上最終方案去寫的話,實在太繁瑣。Python引入了with語句來自動幫我們調用close()方法
重點:!!!with 的作用就是自動調用close()方法 !!!
# 使用方法: with open('/path/to/file', 'r') as f: print(f.read()) # >>> 相較于單獨使用 open() 函數,是不是代碼更佳簡潔,并且不必調用f.close()方法了呢?
利用with open() 函數讀取文件的小實戰
import os def create_package(path): if os.path.exists(path): raise Exception('%s 已經存在,不可創建' % path) else: os.mkdir(path) init_path = os.path.join(path, '__init__.py') file_init = open(init_path, 'w', encoding='utf-8') file_init.write('# coding:utf-8\n') file_init.close() class Open(object): def __init__(self, path, mode='w', is_return=True): # 這里的 is_return 定義的是換行的意思,結合下文的 message 理解 self.path = path self.mode = mode self.is_return = is_return def write(self, message): file_test = open(self.path, mode=self.mode) if self.is_return: # 如果返回 Ture 則 在 message 后,增加換行符 message = '%s\n' % message file_test.write(message) file_test.close() def read(self, is_strip=True): # is_strip 用于判斷每一行結尾的換行符將其去掉 result = [] # 定義一個空列表,用來讀取每一行內容 with open(self.path, mode=self.mode) as file: data = file.readlines() # 文件對象讀取文件內容一但脫離 with open() 函數,就會自動執行 close() 函數 關閉文件 for line in data: # for循環遍歷data ,若讀取的那一行內容不為空且如果存在'\n'符,去掉'\n'符然后加入result列表 if is_strip: # is_strip 默認就是 True temp = line.strip() if temp != '': result.append(temp) else: # 如果讀取的那一行不為空,加入result列表 if line != '': result.append(line) return result if __name__ == '__main__': current_path = os.getcwd() open_path = os.path.join(current_path, 'test.txt') open_test = Open(open_path, mode='r') data = open_test.read() # data = open_test.read(is_strip=False) print(data)
執行結果如下:
原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123698940
相關推薦
- 2022-11-25 k8s?中的?service?如何找到綁定的?Pod?及實現?Pod?負載均衡的方法_云其它
- 2022-11-22 Golang?Compare?And?Swap算法詳細介紹_Golang
- 2022-07-26 對Python中GIL(全局解釋器鎖)的一點理解淺析_python
- 2022-02-10 el-tree在el-form中的rules校驗
- 2022-07-30 windows安裝matplotlib方法(cmd+pycharm)+cmd不運行python命令解
- 2021-12-12 C++多線程之互斥鎖與死鎖_C 語言
- 2022-05-19 gorm整合進go-zero的實現方法_Golang
- 2022-10-29 vite 配置 @ 路徑別名
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支