日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python學習之文件的讀取詳解_python

作者:渴望力量的哈士奇 ? 更新時間: 2022-05-26 編程語言

上一章節 我們學習了如何利用 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

欄目分類
最近更新