婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python3讀取文件指定行的三種方法

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

熱門標簽:地圖標注線上如何操作 河北防封卡電銷卡 應電話機器人打電話違法嗎 400電話辦理哪種 開封自動外呼系統怎么收費 開封語音外呼系統代理商 手機網頁嵌入地圖標注位置 電銷機器人的風險 天津電話機器人公司

行遍歷實現

在python中如果要將一個文件完全加載到內存中,通過file.readlines()即可,但是在文件占用較高時,我們是無法完整的將文件加載到內存中的,這時候就需要用到python的file.readline()進行迭代式的逐行讀取:

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

這里我們的實現方式是先用一個with語句打開一個文件,然后用readline()函數配合while循環逐行加載,最終通過一個序號標記來結束循環遍歷,輸出文件第50000000行的內容。該代碼的執行效果如下:

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

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

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

linecache實現

雖然在python的readline函數中并沒有實現讀取指定行內容的方案,但是在另一個庫linecache中是實現了的,由于使用的方式較為簡單,這里直接放上代碼示例供參考:

filename = 'hello.txt'

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

該代碼的執行結果如下:

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

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

雖然在實現方式上簡化了許多,但是我們發現這個實現的用時超過了11s,還不如我們自己手動實現的循環遍歷方案。因此如果是對于性能有一定要求的場景,是不建議采用這個方案的。

命令行sed獲取

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

filename = 'hello.txt'

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

需要注意的是,如果直接運行os.system()是沒有返回值的,只有os.popen()是有返回值的,并且需要在尾巴加上一個read()的選項。該代碼的執行結果如下:

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

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

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

filename = 'hello.txt'

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

我們把讀取第50000000行內容改為讀取第500行的內容,再運行一次程序:

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

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

然而我們發現這個速度并沒有因為要讀取的行數減少了而變少,而是幾乎保持不變的。

總結概要

本文通過4個測試案例分析了在python中讀取文件指定行內容的方案,并得到了一些運行耗時的數據。從需求上來說,如果是對于小規模的數據,比如幾百行規模的數據,建議使用readline循環遍歷來操作,速度也相當不錯,或者是linecache中的函數實現也是可以的,甚至可以直接用readlines將整個文本內容加載到內存中。但是對于數據規模比較大的場景,比如超過了千萬行的級別,那么使用sed指令的方式對指定行內容進行讀取的方式,應該是所有方式中最快速的。

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

作者ID:DechinPhy

以上就是python3讀取文件指定行的三種方法的詳細內容,更多關于python讀取文件指定行的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python 利用openpyxl讀取Excel表格中指定的行或列教程
  • Python fileinput模塊如何逐行讀取多個文件
  • Python 整行讀取文本方法并去掉readlines換行\n操作
  • python讀取excel進行遍歷/xlrd模塊操作
  • 如何在Python對Excel進行讀取
  • 使用Python對Dicom文件進行讀取與寫入的實現
  • python讀取文件指定行內容實例講解
  • Python逐行讀取文件內容的方法總結
  • Python從文件中讀取指定的行以及在文件指定位置寫入
  • python按行讀取文件并找出其中指定字符串

標簽:江蘇 駐馬店 蘭州 山東 六盤水 宿遷 常州 成都

巨人網絡通訊聲明:本文標題《python3讀取文件指定行的三種方法》,本文關鍵詞  python3,讀取,文件,指定,行的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python3讀取文件指定行的三種方法》相關的同類信息!
  • 本頁收集關于python3讀取文件指定行的三種方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 永仁县| 灵寿县| 信宜市| 莲花县| 子长县| 马关县| 会理县| 监利县| 莱西市| 潮州市| 买车| 华坪县| 齐齐哈尔市| 肃南| 滦平县| 武功县| 曲沃县| 洮南市| 多伦县| 普宁市| 桂东县| 克东县| 铜梁县| 京山县| 宁波市| 孟连| 辽宁省| 鄂温| 邵阳县| 阳江市| 霍邱县| 津南区| 澎湖县| 织金县| 大连市| 漳浦县| 庄浪县| 寻甸| 桑日县| 孙吴县| 巫山县|