<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一章節 我們學習瞭如何利用 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() |
注意:下文演示的 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() 函數
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() 函數;下面我們來看一下 演示案例:
file = open('read_test.py', 'r') data = file.readline() data # >>> 執行結果如下: # >>> '# coding:utf-8n' data = file.readline() data # >>> 執行結果如下: # >>> 'n'
如下圖:
見下圖:
還記得我們上一章節的檔案的建立於寫入裡面的實戰小案例麼?今天我們就在上一章節的實戰小案例上進行一個補充,拓展一下我們關於讀取檔案的功能(函數)
在進行 檔案讀取小實戰之前,我們先來了解一下 wiht open() 函數,如下。
前文我們瞭解到,如果想要讀取一個檔案就需要先使用 open() 函數,開啟檔案並賦予其開啟的模式,最後必須要要操作 close() 函數;這就是一個完整的讀取檔案內容的一個步驟,但是這個步驟過於繁瑣不說,在檔案不存在或者沒有執行 close() 函數的情況下,還會丟擲一個IOError的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在,範例如下:
每次如果都按照如上最終方案去寫的話,實在太繁瑣。Python引入了with語句來自動幫我們呼叫close()方法
重點:!!!with 的作用就是自動呼叫close()方法 !!!
# 使用方法: with open('/path/to/file', 'r') as f: print(f.read()) # >>> 相較於單獨使用 open() 函數,是不是程式碼更佳簡潔,並且不必呼叫f.close()方法了呢?
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-8n') 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 = '%sn' % 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)
執行結果如下:
以上就是Python學習之檔案的讀取詳解的詳細內容,更多關於Python檔案讀取的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45