1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python快速读取大文件_Python学习的窍门:如何读取大文件

python快速读取大文件_Python学习的窍门:如何读取大文件

时间:2024-01-22 02:47:56

相关推荐

python快速读取大文件_Python学习的窍门:如何读取大文件

原标题:Python学习的窍门:如何读取大文件

生活中,学习中很多事情做起来都是有一些小窍门的,Python学习也不例外。今天给大家分享Python学习的窍门:如何读取大文件

readlines、read()、readline()等一次性读取遇到很大的文件都可能面临内存崩溃,所以我们将读取操作细化一点

1. read(size) + yield

固定每次读取的长度,使用生成器返回

def read_file1(file='articles.txt'):

time.sleep(1)

block_size = 1024

with open(file, 'r', encoding='utf-8') as f:

while True:

block = f.read(block_size)

if block:

yield block

else:

break

2. for line in

迭代遍历,这个方法会自动地使用缓冲IO(buffered IO)以及内存管理,但是如果大量数据都在一行还是会出状况

def read_file2(file='articles.txt'):

with open(file, 'r', encoding='utf-8') as f:

for line in f:

print(line)

3. buff机制

对于所有数据都在一行的话,用for line in不仅仅没法处理而且获取数据的时候也没法获取到有效内容,这一行数据里明显会包含换行符、分隔符等,这个时候我们就可以自建一个buff管理来处理数据了,将每一次读取的内容加入缓存,对分隔符做处理后下次就从这之后依次处理

def read_file3(split_str, size, file='articles.txt', ):

with open(file, 'r', encoding='utf-8') as f:

buff = "" #定义缓冲区

while True:

print("buff:", buff)

while split_str in buff: #若分隔符在缓冲区内

print("捕捉到分隔符", buff)

position = buff.index(split_str) #查找分隔符第一次出现的索引

yield buff[:position] #返回从初始索引到次索引之间的缓冲区内容

buff = buff[position + len(split_str):] #更新缓冲区,除去分隔符以及之前的内容

chunk = f.read(size) #缓冲区内无分隔符则读取size个字符

if chunk: #读取到内容,将内容添加到缓冲区

buff += chunk

else:

yield buff #没读取到内容,退出循环

break

怎么样,这些Python学习的小窍门你掌握了多少!更多的Python学习教程也会继续为大家更新!返回搜狐,查看更多

责任编辑:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。