Python實現(xiàn)高效地讀寫大型文件
上一篇給大家介紹如何使用 Python 進行文件讀寫操作的方法,問題來了,如何讀寫的是大型文件,有沒有什么方法來提高效率呢,不要捉急,這一篇來聊聊如何在Python中高效地讀寫大型文件。
以下是在 Python 中高效讀寫大型文件的一些方法:
一、逐行讀取大型文件
def read_large_file_line_by_line(file_path):
with open(file_path, 'r') as file:
for line in file:
# 處理每一行的數(shù)據(jù),這里僅打印
print(line.strip())
with open(file_path, 'r') as file:使用with語句打開文件,確保文件在使用完畢后自動關(guān)閉。for line in file:文件對象是可迭代的,逐行讀取文件內(nèi)容,避免一次性將整個文件讀入內(nèi)存,節(jié)省內(nèi)存空間,適用于大型文本文件。
二、分塊讀取大型文件
def read_large_file_in_chunks(file_path, chunk_size=1024):
with open(file_path, 'r') as file:
while True:
data = file.read(chunk_size)
if not data:
break
# 處理讀取到的數(shù)據(jù)塊,這里僅打印
print(data)
file.read(chunk_size):每次讀取指定大?。?code>chunk_size)的數(shù)據(jù)塊,循環(huán)讀取直到文件結(jié)束。chunk_size可以根據(jù)實際情況調(diào)整,一般根據(jù)文件大小和可用內(nèi)存來選擇合適的值。
三、使用 mmap 模塊進行內(nèi)存映射文件操作(適用于大文件)
import mmap
def read_large_file_with_mmap(file_path):
with open(file_path, 'r') as file:
with mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as mmap_obj:
# 處理映射的數(shù)據(jù),這里僅打印
print(mmap_obj.readline())
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ):將文件映射到內(nèi)存中,實現(xiàn)文件的高效讀寫,fileno()方法獲取文件描述符。- 可以像操作字符串一樣操作
mmap_obj,避免了頻繁的文件 I/O 操作,提高性能。
四、使用 pandas 分塊處理大型 CSV 文件(適用于 CSV 文件)
import pandas as pd
def read_large_csv_in_chunks(csv_file_path):
chunk_size = 100000 # 每塊的行數(shù)
for chunk in pd.read_csv(csv_file_path, chunksize=chunk_size):
# 處理數(shù)據(jù)塊,這里僅打印
print(chunk)
pd.read_csv(csv_file_path, chunksize=chunk_size):將 CSV 文件按塊讀取,chunksize為每塊的行數(shù)。- 可以對每個
chunk進行數(shù)據(jù)處理,如數(shù)據(jù)清洗、分析等操作,避免一次性加載整個文件。
五、使用 numpy 分塊處理大型二進制文件(適用于二進制文件)
import numpy as np
def read_large_binary_in_chunks(binary_file_path, chunk_size=1024):
with open(binary_file_path, 'rb') as file:
while True:
data = np.fromfile(file, dtype=np.float32, count=chunk_size)
if data.size == 0:
break
# 處理數(shù)據(jù)塊,這里僅打印
print(data)
np.fromfile(file, dtype=np.float32, count=chunk_size):從文件中讀取二進制數(shù)據(jù),dtype為數(shù)據(jù)類型,count為元素數(shù)量。- 可以根據(jù)文件的存儲數(shù)據(jù)類型調(diào)整
dtype,按塊讀取二進制文件。
六、使用 itertools 模塊進行迭代處理(適用于文本文件)
import itertools
def read_large_file_with_itertools(file_path, chunk_size=1024):
with open(file_path, 'r') as file:
for chunk in itertools.zip_longest(*[iter(file)]*chunk_size):
chunk = [line.strip() for line in chunk if line]
# 處理數(shù)據(jù)塊,這里僅打印
print(chunk)
itertools.zip_longest(*[iter(file)]*chunk_size):將文件迭代器分組,每組 chunk_size 行,方便分塊處理。
七、使用 linecache 模塊逐行讀取大型文件(適用于文本文件)
import linecache
def read_large_file_with_linecache(file_path, line_number):
line = linecache.getline(file_path, line_number)
# 處理指定行的數(shù)據(jù),這里僅打印
print(line.strip())
linecache.getline(file_path, line_number):從文件中獲取指定行的數(shù)據(jù),適用于只需要讀取文件中某些行的情況,避免讀取整個文件。
總結(jié)
在處理大型文件時,根據(jù)文件類型和操作需求,可靈活使用上述方法,避免一次性將整個文件加載到內(nèi)存中,從而提高程序的性能和穩(wěn)定性。同時,可以結(jié)合不同的模塊和函數(shù),實現(xiàn)復雜的數(shù)據(jù)處理和分析任務。好了,趕快收藏起來吧,實際工作中你一定會用得到。
到此這篇關(guān)于Python實現(xiàn)高效地讀寫大型文件的文章就介紹到這了,更多相關(guān)Python讀寫大型文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python設(shè)置Socket代理及實現(xiàn)遠程攝像頭控制的例子
這篇文章主要介紹了Python設(shè)置Socket代理及實現(xiàn)遠程攝像頭控制的例子,皆是對socket模塊的實際運用,需要的朋友可以參考下2015-11-11
python 插入Null值數(shù)據(jù)到Postgresql的操作
這篇文章主要介紹了python 插入Null值數(shù)據(jù)到Postgresql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
python從內(nèi)存地址上加載python對象過程詳解
這篇文章主要介紹了python從內(nèi)存地址上加載pythn對象過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01
Python使用ctypes實現(xiàn)與C++互相調(diào)用的實踐教程
這篇文章主要為大家詳細介紹了Python如何使用ctypes實現(xiàn)與C++互相調(diào)用,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2026-02-02
5個快速上手的Python PyBlueZ藍牙開發(fā)技巧分享
PyBlueZ作為Python藍牙編程的重要工具,為開發(fā)者提供了簡單高效的藍牙通信解決方案,本文將從實際應用角度出發(fā),分享5個實用的開發(fā)技巧,幫助你快速掌握Python藍牙編程,希望對大家有所幫助2026-01-01
Python進行ffmpeg推流和拉流rtsp、rtmp實例詳解
Python推流本質(zhì)是調(diào)用FFmpeg的推流進程,下面這篇文章主要給大家介紹了關(guān)于Python進行ffmpeg推流和拉流rtsp、rtmp的相關(guān)資料,需要的朋友可以參考下2023-01-01
利用Selenium添加cookie實現(xiàn)自動登錄的示例代碼(fofa)
這篇文章主要介紹了利用Selenium添加cookie實現(xiàn)自動登錄的示例代碼(fofa),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05

