Python Every Day, 第 9 天
文件的读写用到了Python的内置函数open()。读取文件的方式有三种
- read()
- readline()
- readlines()
他们都可以传入一个int类型的参数,来限制读取的范围。默认读取全部内容
创建文件的open函数用法:
file = open(file_name, mode='r',encoding=)
file_name:文件路径
mode:打开方式:默认'r',
encoding: 指定打开的编码
常用的打开方式:
- r:以只读的方式打开文件,文件必须存在
- r+ :以读写的方式打开文件,文件必须存在
- w:以写的方式打开文件,文件若存在,则清空内容,从头写入。若不存在自动创建
- w+:已读写的方式打开文件,文件若存在,则清空内容,从头写入。若不存在自动创建
- a:已写的方式打开文件,如果存在,则后面追加写入,如果不存在,则创建
- a+:已读写的方式打开文件,如果存在,则后面追加写入,如果不存在,则创建
read()
一次性读取整个文件,以字符串的形式返回,如果文件过大,会占用较大的内存空间。
创建古诗文件
try: # 只读模式,utf-8编码打开 file = open('古诗', mode='r', encoding='utf-8') # 床前明月光, print(file.read(6)) # 读取前6个字符。如果不填 输入全部except (FileNotFoundError, IOError) as e: print('文件异常')finally: file.close()
# 只读模式,utf-8编码打开
file = open('古诗', mode='r', encoding='utf-8')
# 床前明月光,
print(file.read(6)) # 读取前6个字符。如果不填 输入全部
except (FileNotFoundError, IOError) as e:
print('文件异常')
finally:
file.close()
上述代码是一种相对比较low的写法,因为每次读取文件都要关闭文件。这样做是为了操作文件占用的操作系统资源。所以一般读写文件都不这样写,而是通过with open..as..的形式去完成。
如下:
with open('text', 'r', encoding='utf-8') as file: """ 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 """ print(file.read())'text', 'r', encoding='utf-8') as file:
"""
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
"""
print(file.read())
readline()
按行读取文件,读取大文件的时候因为一次只读一行数据,所以不会占用较大内存。
with open('text', 'r', encoding='utf-8') as file: while 1: line = file.readline() if not line: break # readline() 每读取一行内容会有个换行符。 # print(line.strip()) print(line.replace('\n', ''))'text', 'r', encoding='utf-8') as file:
while 1:
line = file.readline()
if not line:
break
# readline() 每读取一行内容会有个换行符。
# print(line.strip())
print(line.replace('\n', ''))
readlines()
一次读取所有文件内容,返回列表,列表中的每个元素 代表每一行的内容。
with open('古诗', 'r', encoding='utf-8') as file: lines = file.readlines() # ['床前明月光,\n', '疑是地上霜。\n', '举头望明月,\n', '低头思故乡。'] print(lines) for i in lines: print(i.strip())'古诗', 'r', encoding='utf-8') as file:
lines = file.readlines()
# ['床前明月光,\n', '疑是地上霜。\n', '举头望明月,\n', '低头思故乡。']
print(lines)
for i in lines:
print(i.strip())