一、open() 方法
- 用于打开一个文件,并返回文件对象,如果该文件无法被打开,会抛出
OS Error
- 一定要保证关闭文件对象,即调用
file.close()
方法
open(file, mode='r')
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
序号 | 参数 | 描述 |
---|
01 | file | 必选,相对或者绝对路径 |
02 | mode | 可选,文件打开模式 |
03 | buffering | 设置缓冲 |
04 | encoding | 一般使用 UTF8 |
05 | errors | 报错级别 |
06 | newline | 区分换行符 |
07 | closefd | 传入的 file 参数类型 |
08 | opener | |
序号 | 模式 | 描述 |
---|
01 | t | 文本模式 (默认) |
02 | x | 写模式,新建一个文件,如果该文件已存在,则会报错 |
03 | b | 二进制模式 |
04 | + | 打开一个文件进行更新 (可读可写) |
05 | U | 通用换行模式 (不推荐) |
06 | r | 打开一个文件只用于 只读 。文件指针将会放在文件的 开头 |
07 | rb | 以 二进制格式 打开一个文件用于 只读 。文件指针将会放在文件的 开头 |
08 | r+ | 打开一个文件用于 读写。文件指针将会放在文件的 开头 |
09 | rb+ | 以 二进制格式打开一个文件用于 读写 。文件指针将会放在文件的 开头 |
10 | w | 打开一个文件只用于 写入 。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
11 | wb | 以 二进制格式 打开一个文件只用于 写入 。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在 ,创建新文件 |
12 | w+ | 打开一个文件用于 读写。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在 ,创建新文件 |
13 | wb+ | 以 二进制格式 打开一个文件用于 读写。如果该文件 已存在 则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件 不存在,创建新文件 |
14 | a | 打开一个文件用于 追加 。如果该文件已存在,文件指针将会放在文件的 结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件 不存在 ,创建新文件进行 写入 |
15 | ab | 以 二进制格式 打开一个文件用于 追加。如果该文件 已存在,文件指针将会放在文件的 结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件 不存在 ,创建新文件进行 写入 |
16 | a+ | 打开一个文件用于 读写 。如果该文件 已存在 ,文件指针将会放在文件的 结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于 读写 |
17 | ab+ | 以 二进制格式 打开一个文件用于 追加 。如果该文件 已存在 ,文件指针将会放在文件的 结尾 。如果该文件 不存在 ,创建新文件用于 读写 |
二、文件对象方法
序号 | 模式 | 描述 |
---|
01 | file.close() | 关闭文件 。关闭后文件不能再进行读写操作 |
02 | file.flush() | 刷新文件内部缓冲 。直接把内部缓冲区的数据 立刻写入文件 ,同时清空缓冲区 |
03 | file.fileno() | 返回 一个整型的文件描述符,可用于底层操作系统的 I/O 操作 |
04 | file.isatty() | 检测 文件 是否 连接到一个终端设备,如果是返回 True ,否则返回 False |
05 | file.next(iterator) | 返回 文件的 下一行 ,如果到达结尾 (EOF) ,则触发 StopIteration |
06 | file.read([size]) | 返回 从文件 读取指定的字节数 ,如果未给定或为负,则读取所有 |
07 | file.readline([sizeint]) | 返回 从文件 读取整行 (指定的字节数) ,包括换行符 |
08 | file.readlines([sizeint]) | 返回 列表所有行 (直到结束符 EOF ) |
09 | file.seek(offset, whence) | 移动文件读取指针到指定位置 |
10 | file.tell() | 返回 文件的 当前位置 ,即文件指针当前位置 |
11 | file.truncate([size]) | 截断 从文件的首行首字符到指定大小的字符串 ,无指定表示从当前位置截断 |
12 | file.write(str) | 返回 写入的字符长度,并将字符串写入文件 |
13 | file.writelines(sequence) | 向文件写入 一个序列字符串列表 ,如果需要换行,则要每行要加上换行符 |
def file_replace(file_name, rep_word, new_word):
f_read = open(file_name)
content = []
count = 0
for eachline in f_read:
if rep_word in eachline:
count += eachline.count(rep_word)
eachline = eachline.replace(rep_word, new_word)
content.append(eachline)
decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
% (file_name, count, rep_word, rep_word, new_word))
if decide in ['YES', 'Yes', 'yes']:
f_write = open(file_name, 'w')
f_write.writelines(content)
f_write.close()
f_read.close()
file_name = input('请输入文件名:')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name, rep_word, new_word)