[Python] 三种文件读取方式:生成器分块/按行/一次读取

三种文件读取方式。一次读取文件、按行读取文件、按行读取并跳过某些行、按块读取文件。

一次读取

def read_file_by_total(file):
    """ 一次读取整个文件 """
    with open(file, mode='r', encoding='utf-8') as f:
        return f.read()

按行读取

""" 按行读取,去掉行尾换行符 """
def read_file_by_line(file):
    with open(file, mode='r', encoding='utf-8') as f:
        while True:
            one_line = f.readline()
            if not one_line:
                return
            else:
                yield one_line.strip()  # 去掉每行结尾的换行


""" 按行读取,遇到空行退出 """
def read_file_by_line(file):
    
    with open(file, mode='r', encoding='utf-8') as f:
        while True:
            one_line = f.readline().strip()
            if not one_line:
                return
            yield one_line

""" 按行读取,跳过空行,去掉行尾换行符 """
def read_file_by_line(file):
    with open(file, mode='r', encoding='utf-8') as f:
        while True:
            one_line = f.readline()
            if one_line.isspace():
                continue
            elif not one_line:
                return
            else:
                yield one_line.strip()  # 去掉每行结尾的换行

""" 按行读取,跳过以startwith开头的行,遇到空行退出 """
def read_file_by_line_skip(file, startwith=None):
    with open(file, mode='r', encoding='utf-8') as f:
        while True:
            one_line = f.readline().strip()
            while one_line.startswith(startwith):
                one_line = f.readline().strip()
            if not one_line:
                return
            yield one_line

调用:

lines = read_file_by_line('test.txt')
for line in lines:
    print(line)

lines = read_file_by_line_skip('test.txt', startwith='#')
for line in lines:
    print(line)

按块读取

""" 按块读取 """
def read_file_by_chunk(file, chunk_size=512):
    with open(file, mode='r', encoding='utf-8') as f:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                return
            yield chunk

调用:

chunks = read_file_by_chunk('test.txt')
for chunk in chunks:
    print(chunk, end='')
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值