七天学会Python基础-第四天1/2-文件操作
-
文件按操作的初始
-
利用Python代码写一个软件,去操作文件
- 文件路径:path
- 打开方式:读,写,追加,读写,写读......
- 编码方式:utf-8,gbk,gb2313......
-
f=open('d:\test.txt',encoding='utf-8',mode='r') content=f.read() print(content) f.close()- open为内置函数,open底层调用的是操作系统的接口
- f为文件句柄,由用户自定义,对文件进行的任何操作都得通过文件句柄(建立变量与系统文件的映射关系)
- encoding:可以不写,若不写参数,默认的编码本是操作系统的编码本。
- windows:gbk
- linux:utf-8
- mac:utf-8
- read:全部读取出来
- close:关闭文件句柄(切断映射关系)
-
文件操作三部曲
- 打开文件
- 对文件句柄进行相应的操作
- 关闭文件
-
操作原因:
- UnicodeDecodeError:文件存储时与文件打开时编码本运用不一致
- SyntaxError:语法错误,Python将路径中的反斜杠识别成了转义字符,解决方法
- 使用两个反斜杠
- 路径前面,引号外面加个r,表示这个字符串中所有反斜杠都表示路径,不进行任何转义
-
-
文件操作的读(r,rb,r+,r+b......)
-
f=open(path,mode='r',encoding="utf-8")
-
content=f.read(n),不加参数获取文件全部内容,加n获取n个字符
-
content=f.readline(),读取一行,读完后游标移动到下一行
-
lst1=f.readlines(),返回一个列表,里面每一个元素是文件中的一行
-
for 读取
-
for line in f: print(line) f.close()
-
-
-
f=open(path,mode='rb'),操作的是非文本的文件,图片,视频,音频
- 拥有的方法同上
-
-
文件操作的写(w,wb,w+,w+b......)
-
没有文件创建文件,有文件则清空文件,再写入
-
f=open(path,mode='w',encoding="utf-8")
- f.write('书写内容')
-
f=open(path,mode='wb')
- f.write(str),注意:此时的str为bytes类型
-
-
文件操作的追加(a,ab,a+,a+b......)
-
没有文件创建文件,有文件则在源文件末尾追加内容
-
f=open(path,mode='a',encoding="utf-8")
-
f.write('书写内容')
-
-
文件操作的其他模式
- r+(读写)
- 没有文件,不创建文件
- 这里有一个游标的概念
- f=open(path,mode='r+',encoding="utf-8")
- 若先读后写,则进行追加
- 若先写则进行覆盖,从游标位置开始读取
- r+(读写)
-
文件操作的其他功能
- 总结
- 三个大方向:
- 读:r,r+,rb,r+b
- 写:w,w+,wb,w+b
- 追加:a,a+,ab,a+b
- 相应的功能:对文件句柄的操作:read(),read(n),readline(),readlines(),write()
- f.tell(),获取游标位置,单位是字节
- f.seek(6),调整光标位置,默认从0开始读
- f.flush(),强制刷新(保存),写完文件可能不会立马刷新
- 三个大方向:
- 总结
-
打开文件的另一种方式
-
with open(path,mode='r',encoding='utf-8') as f:
-
优点1:不用手动关闭,简化了文件操作,会在一定时间内自动关闭
-
优点2:可以操作多个文件
-
缺点:待续
-
with open(path,mode='r',encoding='utf-8') as f,with open(path2,encoding='utf-8',mode='w') as f2: print(f1.read()) f2.write('新内容')
-
-
-
-
文件操作的改
-
现存世界上对文件进行修改操作的软件都离不开这五部
- 以读的模式打开源文件
- 以写的模式创建一个新文件
- 将原文件的内容读出来(加载到内存)修改成新内容,写入新文件
- 将源文件删除(需要引入os模块)
- 将新文件命名成原文件
# 基础版本(将内容全部读取出来,适用于小文件) import os # 1. 以读的模式打开源文件 # 2. 以写的模式创建一个新文件 with open('oldname',encoding='utf-8',mode='r') as f1 , open('newname',encoding='utf-8',mode='w') as f2: # 3.将源文件全部读取出来改成新内容 old_content=f1.read() new_content=old_content.replace('alex','taibai') f2.write(new_content) os.remove('oldname') os.rename('newname','oldname')# 进阶版(一行一行读取:适用于大文件) import os # 1. 以读的模式打开源文件 # 2. 以写的模式创建一个新文件 with open('oldname',encoding='utf-8',mode='r') as f1 , open('newname',encoding='utf-8',mode='w') as f2: # 3.将源文件全部读取出来改成新内容 for line in f1: # 第一次循环line是第一行 # old_line=line.strip() new_line=old_line.replace('taibai','alex') f2.write(new_line) os.remove('oldname') os.rename('newname','oldname') -
补充:
- 有关清空的问题,使用w模式操作文件时,只有关闭文件句柄后再使用w模式打开才会清空
-

浙公网安备 33010602011771号