三种文件读取方式。一次读取文件、按行读取文件、按行读取并跳过某些行、按块读取文件。
一次读取
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='')