最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3讀取文件指定行的三種方法

 更新時(shí)間:2021年05月24日 10:51:25   作者:Dechin''s  
考慮到深度學(xué)習(xí)領(lǐng)域中的數(shù)據(jù)規(guī)模一般都比較大,尤其是訓(xùn)練集,這個(gè)限制條件對(duì)應(yīng)到實(shí)際編程中就意味著,我們很有可能無(wú)法將整個(gè)數(shù)據(jù)文件的內(nèi)容全部都加載到內(nèi)存中。那么就需要一些特殊的處理方式,本文將要介紹的是從文件中只讀取特定行的內(nèi)容的3種解決方案。

行遍歷實(shí)現(xiàn)

在python中如果要將一個(gè)文件完全加載到內(nèi)存中,通過file.readlines()即可,但是在文件占用較高時(shí),我們是無(wú)法完整的將文件加載到內(nèi)存中的,這時(shí)候就需要用到python的file.readline()進(jìn)行迭代式的逐行讀?。?/p>

filename = 'hello.txt'

with open(filename, 'r') as file:
    line = file.readline()
    counts = 1
    while line:
        if counts >= 50000000:
            break
        line = file.readline()
        counts += 1

這里我們的實(shí)現(xiàn)方式是先用一個(gè)with語(yǔ)句打開一個(gè)文件,然后用readline()函數(shù)配合while循環(huán)逐行加載,最終通過一個(gè)序號(hào)標(biāo)記來(lái)結(jié)束循環(huán)遍歷,輸出文件第50000000行的內(nèi)容。該代碼的執(zhí)行效果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m10.359s
user    0m10.062s
sys     0m0.296s

可以看到這里的耗時(shí)為10s多一些。

linecache實(shí)現(xiàn)

雖然在python的readline函數(shù)中并沒有實(shí)現(xiàn)讀取指定行內(nèi)容的方案,但是在另一個(gè)庫(kù)linecache中是實(shí)現(xiàn)了的,由于使用的方式較為簡(jiǎn)單,這里直接放上代碼示例供參考:

filename = 'hello.txt'

import linecache
text = linecache.getline(filename, 50000000)

該代碼的執(zhí)行結(jié)果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m11.904s
user    0m5.672s
sys     0m6.231s

雖然在實(shí)現(xiàn)方式上簡(jiǎn)化了許多,但是我們發(fā)現(xiàn)這個(gè)實(shí)現(xiàn)的用時(shí)超過了11s,還不如我們自己手動(dòng)實(shí)現(xiàn)的循環(huán)遍歷方案。因此如果是對(duì)于性能有一定要求的場(chǎng)景,是不建議采用這個(gè)方案的。

命令行sed獲取

我們知道用Linux系統(tǒng)本身自帶的sed指令也是可以獲取到文件指定行或者是指定行范圍的數(shù)據(jù)的,其執(zhí)行指令為:sed -n 50000000p filename即表示讀取文件的第50000000行的內(nèi)容。同時(shí)結(jié)合python的話,我們可以在python代碼中執(zhí)行系統(tǒng)指令并獲取輸出結(jié)果:

filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(50000000, filename)).read()

需要注意的是,如果直接運(yùn)行os.system()是沒有返回值的,只有os.popen()是有返回值的,并且需要在尾巴加上一個(gè)read()的選項(xiàng)。該代碼的執(zhí)行結(jié)果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.532s
user    0m0.032s
sys     0m0.020s

可以看到直接使用sed指令的執(zhí)行速度很快,但是用這種方法并不是一本萬(wàn)利的,比如以下這個(gè)例子:

filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(500, filename)).read()

我們把讀取第50000000行內(nèi)容改為讀取第500行的內(nèi)容,再運(yùn)行一次程序:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.540s
user    0m0.037s
sys     0m0.013s

然而我們發(fā)現(xiàn)這個(gè)速度并沒有因?yàn)橐x取的行數(shù)減少了而變少,而是幾乎保持不變的。

總結(jié)概要

本文通過4個(gè)測(cè)試案例分析了在python中讀取文件指定行內(nèi)容的方案,并得到了一些運(yùn)行耗時(shí)的數(shù)據(jù)。從需求上來(lái)說,如果是對(duì)于小規(guī)模的數(shù)據(jù),比如幾百行規(guī)模的數(shù)據(jù),建議使用readline循環(huán)遍歷來(lái)操作,速度也相當(dāng)不錯(cuò),或者是linecache中的函數(shù)實(shí)現(xiàn)也是可以的,甚至可以直接用readlines將整個(gè)文本內(nèi)容加載到內(nèi)存中。但是對(duì)于數(shù)據(jù)規(guī)模比較大的場(chǎng)景,比如超過了千萬(wàn)行的級(jí)別,那么使用sed指令的方式對(duì)指定行內(nèi)容進(jìn)行讀取的方式,應(yīng)該是所有方式中最快速的。

本文首發(fā)鏈接為:https://www.cnblogs.com/dechinphy/p/lbl.html

作者ID:DechinPhy

以上就是python3讀取文件指定行的三種方法的詳細(xì)內(nèi)容,更多關(guān)于python讀取文件指定行的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實(shí)現(xiàn)吃蘋果小游戲

    python實(shí)現(xiàn)吃蘋果小游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)吃蘋果小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • python字典的常用操作方法小結(jié)

    python字典的常用操作方法小結(jié)

    下面小編就為大家?guī)?lái)一篇python字典的常用操作方法小結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來(lái)看看吧
    2016-05-05
  • Python+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖功能

    Python+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖功能

    python-uiautomator2封裝了谷歌自帶的uiautomator2測(cè)試框架,提供便利的python接口,這篇文章給大家介紹使用Python+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖(期望輸入的鎖屏密碼,基于滑動(dòng)解鎖),感興趣的朋友一起看看吧
    2021-04-04
  • python中print格式化輸出的問題

    python中print格式化輸出的問題

    所謂格式化輸出,就是創(chuàng)建一個(gè)可以嵌入變量?jī)?nèi)容的字符串。這篇文章主要介紹了python中print格式化輸出,需要的朋友可以參考下
    2021-04-04
  • 在Django的上下文中設(shè)置變量的方法

    在Django的上下文中設(shè)置變量的方法

    這篇文章主要介紹了在Django的上下文中設(shè)置變量的方法,Django是重多Python高人氣框架中最為著名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 如何利用Python實(shí)現(xiàn)給Excel表格截圖

    如何利用Python實(shí)現(xiàn)給Excel表格截圖

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)給Excel表格截圖功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng)完整案例【基于搭建的MVC框架】

    Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng)完整案例【基于搭建的MVC框架】

    這篇文章主要介紹了Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng),結(jié)合完整實(shí)例形式分析了Python基于搭建的MVC框架進(jìn)行登錄驗(yàn)證操作的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-04-04
  • 讓Python程序定時(shí)執(zhí)行的8種方法整理

    讓Python程序定時(shí)執(zhí)行的8種方法整理

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用?Linux?系統(tǒng)自帶的?crond?結(jié)合命令行實(shí)現(xiàn),另外一種方式是直接使用Python。本文整理了一下?Python?定時(shí)任務(wù)的實(shí)現(xiàn)方式,希望對(duì)大家有所幫助
    2023-01-01
  • pyqt QGraphicsView 以鼠標(biāo)為中心進(jìn)行縮放功能實(shí)現(xiàn)

    pyqt QGraphicsView 以鼠標(biāo)為中心進(jìn)行縮放功能實(shí)現(xiàn)

    在PyQt開發(fā)中,實(shí)現(xiàn)QGraphicsView的鼠標(biāo)中心縮放功能需要注意初始化以及關(guān)鍵函數(shù)的重定義,遇到不達(dá)預(yù)期的效果時(shí),可能需要重寫所有鼠標(biāo)事件,本文記錄了解決QGraphicsView鼠標(biāo)縮放問題的過程,供開發(fā)者參考
    2024-10-10
  • django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例

    django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例

    今天小編就為大家分享一篇django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-05-05

最新評(píng)論

江都市| 江西省| 象州县| 海兴县| 濮阳县| 邮箱| 乌审旗| 天峻县| 遵义市| 湖南省| 略阳县| 秦安县| 刚察县| 聂拉木县| 浙江省| 吉木萨尔县| 喀喇沁旗| 浑源县| 安阳县| 阿瓦提县| 安达市| 旺苍县| 新绛县| 霍山县| 永德县| 徐汇区| 依安县| 进贤县| 白玉县| 曲水县| 大兴区| 双鸭山市| 淮阳县| 青海省| 林口县| 璧山县| 陵水| 太湖县| 黔江区| 鲁甸县| 上思县|