Python学习——Day08
python学习——Day08
文件操作三部曲:
- 打开文件
- 对文件句柄进行相应的操作
- 关闭文件
1.打开文件
f1 = open('e:\文件操作初识.txt', encoding='utf-8',mode='r')
content = f1.read()
print(content)
f1.close()
#更过精彩内容尽在:
#www.xaut.edu.cn
- open 内置函数, 底层调用的是操作系统的接口.
- f1 变量,此处叫做文件句柄, 对文件的任何操作. 都必须通过文件句柄. 的方式
- encoding 可以不写, 不写参数, 默认编码本: 操作系统的默认编码方式(windows默认:gbk; linux默认: utf-8)
- close 对文件操作结束之后需要将文件关闭, 不然会占用内存
1.错误类型
- UnicodeDecodeError
错误原因: 文件存储时与文件打开时运用的编码本不一致.
解决方法: 改encoding 中的参数 两者改为一致
-
SyntaxError
-
f1 = open('C:\\Users\\15899\Desktop\文件操作初识.txt', encoding='utf-8',mode='r')
错误原因: 文件路径(C:\Users\15899\Desktop\文件操作初识.txt)中有'\u',被认为是有特殊含义的字符(类似于\n) ,
解决方法:
法一: 对路径中可能是特殊含义字符处的\进行转义 如下:
C:\\Users\\15899\Desktop\文件操作初识.txt
法二: 路径前加r
f1 = open(r'C:\Users\15899\Desktop\文件操作初识.txt', encoding='utf-8',mode='r')
2.文件操作的读
四种模式:r rb r+ r+b
这四种模式都有r模式以下的所有方法!
- r模式
1.read()--全部读出来 **
f1 = open('文件的读', encoding='utf-8')
content = f1.read()
print(content)
f1.close()
- 代码中的文件和这个代码文件在同一个文件夹下 可以使用相对路径
2.read(n) --按照字符读取
f1 = open('文件的读', encoding='utf-8')
content = f1.read(7)
print(content) #知道自己要什么
f1.close()
3.readline() --按照行读取
f1 = open('文件的读', encoding='utf-8')
print( f1.readline())
print( f1.readline())
print( f1.readline())
f1.close()
结果:
知道自己要什么
别理路旁的傻逼
fighting!
4.readlines()--多行读取
- 返回一个列表,列表中的每个元素是原文件中的每一行
f1 = open('文件的读', encoding='utf-8')
l1 = f1.readlines()
print(l1)
f1.close()
#['知道自己要什么\n', '别理路旁的傻逼\n', 'fighting!']
5.for --循环读取 ***
f1 = open('文件的读', encoding='utf-8')
for line in f1:
print(line)
f1.close()
結果:
知道自己要什么
别理路旁的傻逼
fighting!
- rb模式: 操作的是非文本类文件(图片,视频,音频。)。不需要加encoding参数
f = open('1.jpg', mode='rb')
content = f.read()
print(content)
f.close()
结果:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00`\x00`\x00\x00\xff\xdb\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f\x17\x18\x16\x14\x18\x12\x14\x15\x14\xff\xdb\x00C\x01\x03\x04\x04\x05\x04\x05\t\x05\x05\t\x14\r\x0b\r\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14
....
3.文件操作的写
写操作也有 w wb w+ w+b四种模式
- w模式
f = open('文件操作的写', encoding='utf-8', mode='w')
f.write('不知道应该写啥')
f.close()
结果:
-
没有文件 , 则在文件夹下生成一个文件, 文件名为:文件操作的写
-
已经有这个文件,则将文件中原来的内容先清空掉, 再写入新的内容
-
文件内容为: 不知道应该写啥
-
wb模式
f = open('1.jpg', mode='rb')
content = f.read()
f.close()
f1 = open('2.jpg',mode='wb')
f1.write(content)
f1.close()
结果:首先用rb模式读1.jpg的内容
在创建2.jpg这个文件
最后将读取到的1.jpg的内容写入到2.jpg中
2.jpg中存放着与1.jpg相同的照片
4.文件的追加操作
- 四种模式: a, ab ,a+ . a+b
f = open('文件的追加',encoding='utf-8', mode='a')
f.write('论文啥时能改好!')
f.close()
- 没有这个文件就创建这个文件,有这个文件就给里面追加内容
5.文件的其他操作
1.文件的读写操作
f = open('文件的读写操作',encoding='utf-8',mode='r+')
pass
f.close()
FileNotFoundError: [Errno 2] No such file or directory: '文件的读写操作'
- r+ (读写)模式是不能创建新文件的
f = open('文件操作的读写',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('继续改吧 害')
f.close()
結果:输出为:
论文啥时候能改好
有没有个靠谱的查重软件
淦
但是原文件变为:
论文啥时候能改好
有没有个靠谱的查重软件
淦继续改吧 害
注:必须要先读后写, 先写后读会出现错误
总结:
文件操作的三个大方向:读,写,追加
- 读:四种模式:r, rb , r+, r+b
- 写:四种模式:w,wb,w+,w+b
- 追加:四种模式:a,ab,a+,a+b
1.tell()
- 获取光标的位置,单位是字节(一个中文字符是3字节 一个英文字符是一字节,一个符号一字节)
f = open('文件的读',encoding = 'utf-8')
print(f.tell()) #0
content = f.read()
print(f.tell()) #57
读文件之前 光标位置为0 读完之后光标移到57位置(结尾位置)
2.seek()
- 调整光标的位置
f = open('文件的读',encoding = 'utf-8')
print(f.seek(6))
content = f.read()
print(content)
f.close()
結果:
6
自己要什么
别理路旁的傻逼
fighting!
- 将光标位置调整到第6个位置 然后从那里开始读文件
3.flush()
- 强制刷新 写文件之后可以帮助保存
f = open('文件的其他操作',encoding='utf-8',mode='w')
f.write('sasdada')
f.flush()
f.close()
6.文件的另一种打开方式
with open('文件的读',encoding='utf-8') as f1:
print(f1.read())
結果:
知道自己要什么
别理路旁的傻逼
fighting!
优点一:
- 不用手动关闭文件句柄
with open('文件的读',encoding='utf-8') as f1,\
open('文件操作的写',encoding='utf-8',mode='w') as f2:
print(f1.read())
f2.write('sasdada')
优点二:可以一次操作多个文件
7.文件的改操作
- 现在各个文件管理器对文件改的步骤:
1.以读的模式打开原文件
2.以写的模式创建一个新文件
3.将原文件的内容读出来修改成新内容,写入新文件
4.将原文件删除
5.将新文件重命名成原文件
第一版:
import os
# 1.以读的模式打开原文件
# 2.以写的模式创建一个新文件
with open('文件的改操作',encoding='utf-8',mode='r') as f1,\
open('文件的改操作2',encoding='utf-8',mode='w') as f2:
#3.将原文件的内容读出来修改成新内容,写入新文件
old_content = f1.read()
new_content = old_content.replace('hhh','alex')
f2.write(new_content)
# 4.将原文件删除
os.remove('文件的改操作')
# 5.将新文件重命名成原文件
os.rename('文件的改操作2','文件的改操作')
进阶版:
import os
# 1.以读的模式打开原文件
# 2.以写的模式创建一个新文件
with open('文件的改操作',encoding='utf-8',mode='r') as f1,\
open('文件的改操作2',encoding='utf-8',mode='w') as f2:
#3.将原文件的内容读出来修改成新内容,写入新文件
for line in f1:
old_line = line.strip()
new_line = old_line.replace('alex','sb')
f2.write(new_line)
# 4.将原文件删除
os.remove('文件的改操作')
# 5.将新文件重命名成原文件
os.rename('文件的改操作2','文件的改操作')
然鹅运行结果:文件中的数据变成了一行
有关清空的问题:
首先文件:文件操作的写 这个文件存在 执行如下代码
with open('文件操作的写',encoding='utf-8',mode='w') as f1:
f1.write('hhh')
文件中原来的内容会被清空,然后写入新内容
但是 文件在关闭之前可以写入好几次而不会清空之前的内容
with open('文件操作的写',encoding='utf-8',mode='w') as f1:
f1.write('hhh')
f1.write('hhh')
f1.write('hhh')
3, 4行的写并不会对第二行已经写入的内容进行清空,因为这时候并没有关闭文件 全部写完后才有了关闭文件的操作
总结:关闭文件句柄,再次以w模式打开此文件时,才会清空原内容
浙公网安备 33010602011771号