国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:5日期:2022-06-18 15:40:55
目錄行遍歷實現linecache實現命令行sed獲取總結概要行遍歷實現

在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: breakline = file.readline()counts += 1

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

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py real 0m10.359suser 0m10.062ssys 0m0.296s

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

linecache實現

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

filename = ’hello.txt’import linecachetext = linecache.getline(filename, 50000000)

該代碼的執行結果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py real 0m11.904suser 0m5.672ssys 0m6.231s

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

命令行sed獲取

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

filename = ’hello.txt’import osresult = 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.532suser 0m0.032ssys 0m0.020s

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

filename = ’hello.txt’import osresult = os.popen(’sed -n {}p {}’.format(500, filename)).read()

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

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py real 0m2.540suser 0m0.037ssys 0m0.013s

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

總結概要

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

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

作者ID:DechinPhy

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 在线精品国产 | 亚洲精品亚洲一区二区 | 国产精品久久网 | 综合色久七七综合七七蜜芽 | 久久精品国产99久久99久久久 | 亚洲精品一区二区三区不卡 | 国产成人a一在线观看 | 国产成人精品免费视频大全办公室 | 成人综合在线视频免费观看 | 中国精品自拍 | 澳门一级特黄真人毛片 | 免费一级a毛片在线播 | 伊在人亚洲香蕉精品区 | 沈樵在线观看福利 | 国产网站免费 | 韩国一级片视频 | 国产在线视频网址 | 久久久久国产精品美女毛片 | 国产视频www| 国产欧美日韩高清专区手机版 | 国内精品美女写真视频 | 久久se精品一区精品二区 | 国产成人精品午夜在线播放 | 全免费a级毛片免费看视频免 | 一级毛片视频 | 嫩草影院在线观看网站成人 | 欧美的高清视频在线观看 | 国产精品v在线播放观看 | 最刺激黄a大片免费网站 | 美女网站免费观看视频 | 免费区欧美一级毛片精品 | 国产日韩欧美视频在线 | 国产日韩精品视频一区二区三区 | a级毛片免费完整视频 | 亚洲三级毛片 | 日韩一区二区中文字幕 | 亚洲国产精品大秀在线播放 | 精品久久久久久影院免费 | 成人午夜精品久久不卡 | 国产又粗又黄又湿又大 | 手机在线观看毛片 |