欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python學(xué)習(xí)之文件的讀取詳解

 更新時間:2022年03月24日 08:40:13   作者:渴望力量的哈士奇  
這篇文章主要為大家介紹了Python中如何將文件中的內(nèi)容讀取出去來的方法,文中通過示例進(jìn)行了詳細(xì)講解,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下

上一章節(jié) 我們學(xué)習(xí)了如何利用 open() 函數(shù)創(chuàng)建一個文件,以及如何在文件內(nèi)寫入內(nèi)容;今天我們就來了解一下如何將文件中的內(nèi)容讀取出去來的方法。

文件讀取的模式

模式介紹
r (read 的縮寫)讀取文件(返回的是字符串類型)
rb二進(jìn)制形式讀取文件

注意:我們接觸文件的寫入與讀取都是使用的 字符串 類型,那么 集合、元組、列表等就不能寫入了么?嚴(yán)格來說是不可以的,但是我們可以進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換轉(zhuǎn)為字符串呀 。寫入的時候轉(zhuǎn)為字符串類型,讀取的時候再轉(zhuǎn)為原來的數(shù)據(jù)類型即可。 嘿嘿嘿…

文件對象的讀取方法

方法名參數(shù)介紹舉例
read將文件內(nèi)容一次性全部獨取出來,返回整個整個文件的字符串f.read()
readlines將文件內(nèi)容的每一行內(nèi)容切割成列表讀取,返回文件列表f.readlines()
readline將文件每一行內(nèi)容進(jìn)行讀取,一次返回一行,返回文件中的一行f.readline()
modeopen()函數(shù)的 mode屬性,調(diào)用可返回當(dāng)前文件模式f.mode()
name返回文件名稱f.name()
closed返回一個 bool 類型,調(diào)用 closed() 函數(shù)可以知道文件是否關(guān)閉f.closed()

使用 read() 函數(shù)一次性讀取文件全部內(nèi)容

注意:下文演示的 Terminal 終端是在 read_test.py 文件路徑啟動的 ipython 執(zhí)行的。

這是我們讀取 事先創(chuàng)建好的 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 文件內(nèi)容如下

# 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終端 執(zhí)行效果如下圖:

使用 readlines() 函數(shù) 讀取文件內(nèi)容

繼續(xù)上面的腳本我們使用 readlines() 函數(shù)

file = open('read_test.py', 'r')
data = file.readlines()
file.close()

print(data)
print('***************************')
print(type(data))

Terminal 終端 執(zhí)行的效果如下圖:

注意:區(qū)別于 print(data) ,直接打印 data ,顯示效果如下:

這里我們發(fā)現(xiàn)每一行和空行都會有一個換行符,如果我們需要讀取、處理每一行的內(nèi)容,空行與換行符會給我們造成很大的困擾。這里我們就可以利用到字符串的 strip() 函數(shù)加上 for 循環(huán) 就可以處理了。

_data = []

for i in data:
    temp = i.strip()
    if temp != '':
        _data.append(temp)
        
_data

# >>> 執(zhí)行結(jié)果如下圖:

使用 readline() 函數(shù) 逐行讀取文件內(nèi)容

上文我們提到 readline() 函數(shù) 會針對文件每一行內(nèi)容進(jìn)行讀取,一次返回一行;如果想要讀取下一行內(nèi)容,就需要再一次執(zhí)行 readline() 函數(shù);下面我們來看一下 演示案例:

file = open('read_test.py', 'r')
data = file.readline()

data

# >>> 執(zhí)行結(jié)果如下:
# >>> '# coding:utf-8\n'

data = file.readline()

data

# >>> 執(zhí)行結(jié)果如下:
# >>> '\n'

如下圖:

mode()、name()、closed() 函數(shù)演示

見下圖:

文件讀取小實戰(zhàn)

還記得我們上一章節(jié)的文件的創(chuàng)建于寫入里面的實戰(zhàn)小案例么?今天我們就在上一章節(jié)的實戰(zhàn)小案例上進(jìn)行一個補(bǔ)充,拓展一下我們關(guān)于讀取文件的功能(函數(shù))

在進(jìn)行 文件讀取小實戰(zhàn)之前,我們先來了解一下 wiht open() 函數(shù),如下。

with open() 函數(shù)

前文我們了解到,如果想要讀取一個文件就需要先使用 open() 函數(shù),打開文件并賦予其打開的模式,最后必須要要操作 close() 函數(shù);這就是一個完整的讀取文件內(nèi)容的一個步驟,但是這個步驟過于繁瑣不說,在文件不存在或者沒有執(zhí)行 close() 函數(shù)的情況下,還會拋出一個IOError的錯誤,并且給出錯誤碼和詳細(xì)的信息告訴你文件不存在,示例如下:

每次如果都按照如上最終方案去寫的話,實在太繁瑣。Python引入了with語句來自動幫我們調(diào)用close()方法

重點:?。?!with 的作用就是自動調(diào)用close()方法 ?。?!

# 使用方法:
with open('/path/to/file', 'r') as f:
	print(f.read())
    
# >>> 相較于單獨使用 open() 函數(shù),是不是代碼更佳簡潔,并且不必調(diào)用f.close()方法了呢?

利用with open() 函數(shù)讀取文件的小實戰(zhàn)

import os


def create_package(path):
    if os.path.exists(path):
        raise Exception('%s 已經(jīng)存在,不可創(chuàng)建' % 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 定義的是換行的意思,結(jié)合下文的 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 用于判斷每一行結(jié)尾的換行符將其去掉

        result = []                 # 定義一個空列表,用來讀取每一行內(nèi)容

        with open(self.path, mode=self.mode) as file:
            data = file.readlines() # 文件對象讀取文件內(nèi)容一但脫離 with open() 函數(shù),就會自動執(zhí)行 close() 函數(shù) 關(guān)閉文件

        for line in data:           # for循環(huán)遍歷data ,若讀取的那一行內(nèi)容不為空且如果存在'\n'符,去掉'\n'符然后加入result列表
            if is_strip:            # is_strip 默認(rèn)就是 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)

執(zhí)行結(jié)果如下:

以上就是Python學(xué)習(xí)之文件的讀取詳解的詳細(xì)內(nèi)容,更多關(guān)于Python文件讀取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談python socket函數(shù)中,send與sendall的區(qū)別與使用方法

    淺談python socket函數(shù)中,send與sendall的區(qū)別與使用方法

    下面小編就為大家?guī)硪黄獪\談python socket函數(shù)中,send與sendall的區(qū)別與使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 使用K.function()調(diào)試keras操作

    使用K.function()調(diào)試keras操作

    這篇文章主要介紹了使用K.function()調(diào)試keras操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python使用numpy實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

    Python使用numpy實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了Python使用numpy實現(xiàn)BP神經(jīng)網(wǎng)絡(luò),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 使用 setuptools 在 Python 中安裝 egg 文件

    使用 setuptools 在 Python 中安裝 egg 

    Eggs 是 Python 中以前使用的一種分發(fā)格式,它包含特定項目所需的信息,從依賴項到環(huán)境變量,在本文中,我們將討論如何在 Python 中安裝 egg 文件,以及可用于實現(xiàn)此操作的工具,感興趣的朋友一起看看吧
    2023-08-08
  • 詳解Django ORM引發(fā)的數(shù)據(jù)庫N+1性能問題

    詳解Django ORM引發(fā)的數(shù)據(jù)庫N+1性能問題

    這篇文章主要介紹了詳解Django ORM引發(fā)的數(shù)據(jù)庫N+1性能問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 通過python連接Linux命令行代碼實例

    通過python連接Linux命令行代碼實例

    這篇文章主要介紹了通過python連接Linux命令行代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析

    Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析

    這篇文章主要介紹了Python中class內(nèi)置方法__init__與__new__作用與區(qū)別探究,本文中涉及的類均為Python3中默認(rèn)的新式類,對應(yīng)Python2中則為顯式繼承了object的class,因為未繼承object基類的舊式類并沒有這些內(nèi)置方法,需要的朋友可以參考下
    2022-09-09
  • python寫入數(shù)據(jù)到csv或xlsx文件的3種方法

    python寫入數(shù)據(jù)到csv或xlsx文件的3種方法

    這篇文章主要為大家詳細(xì)介紹了python寫入數(shù)據(jù)到csv或xlsx文件的3種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python getattr()函數(shù)使用方法代碼實例

    Python getattr()函數(shù)使用方法代碼實例

    這篇文章主要介紹了Python getattr()函數(shù)使用方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python?面向?qū)ο箝_發(fā)及基本特征

    python?面向?qū)ο箝_發(fā)及基本特征

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?nbsp;“類”和“對象” 的使用,今天給大家介紹下python?面向?qū)ο箝_發(fā)及基本特征,感興趣的朋友一起看看吧
    2022-03-03

最新評論