神奇的python系列7:文件操作

1.文件操作

我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了。

f = open('t2',mode='r',encoding='utf-8')

open() 打开,  第一个内容是文件的名字(必须是字符串)

mode=  第二个内容是咱们对这个文件的操作方式

encoding=  第三个内容是咱们这个文件的编码集

f  文件句柄所有对文件的操作都是操作文件句柄

打开文件的方式:

  r,w,a

  r+,w+,a+

  rb,wb,ab

  r+b,w+b,a+b

默认使用的是r(只读模式)


2.只读

r 只读

f = open('t2',mode='r',encoding='utf-8')
content = f.read()
#读 一次性全部读取
content1 = f.readline()
# 读取一行,但是有个
换行
content = f.readlines()
# readlines  读取一行一行的,存放在列表里
print(content)

rb 读取bytes类型:

rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集(rb,wb,ab模式同样适用)

rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用

到rb,因为这种数据是没办法直接显示出来的。

f = open('C:\Users\oldboy\Desktop\QQ.jpg',mode='rb')
# r 和 \ 一样都是转义
# rb读取字节

绝对路径:从磁盘根目录开始查找

相对路径:相对于某个东西来查找就是相对路径

f = open('QQ.jpg',mode='rb')
# 相对路径 
print(f.read())

3.覆盖写

w 模式:只有写没有读的功能。

f = open('t2.txt',mode='w',encoding='utf-8')
f.write('在网上也是这样。')
f.write('人生三个爽')
#w模式 如果文件不存在就新建一个
#覆盖写,写之前先把文件清空

wb 模式:wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换

成utf-8的bytes数据。

f = open('../path1/小娃娃.txt',mode='wb')
msg = '你好'.encode('utf-8')
f.write(msg)
f.flush()  # 刷新 在写文件的时候我们要养成一个写完文件就刷新的习惯. 刷新flush()
f.close()

a 模式:追加

只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.

在追加模式下,我们写入的内容后追加在文件的末尾。

f = open('t2',mode='a',encoding='utf-8')
f.write('相对路径')
# 文件最后添加内容


4.读写,写读,追加读

r+    读写模式

读写模式,必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.

f1 = open('../path1/小娃娃.txt',mode='r+',encoding='utf-8')
msg = f1.read()
f1.write('这支烟灭了以后')
f1.flush()
f1.close()
print(msg) #结果:正常的读取之后,写在结尾

注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入
或者操作文件的时候都是在结尾进行的操作.

w+ 写读模式

先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,除非移动光标,不常用。

f = open('t2',mode='w+',encoding='utf-8')
f.write('老子今天上班了')
f.seek(0)   # 移动文件光标
print(f.read())

a+  追加读

a+模式下,不论是先读还是后读,都是读不到数据的,除非移动光标。

f = open('t2',mode='a+',encoding='utf-8')
f.seek(0)
print(f.read())
f.write('哈哈哈')

5.文件其他操作

seek()  移动光标

通常我们使用seek都是移动到开头或者结尾

移动到开头:seek(0) 实际是seek(0,0)

当前位置:seek(0,1)

移动到结尾:seek(0,2)

注意: 移动单位是byte,如果是utf-8的中文部分要是3的倍数如果是文字就移动一位,如果是英文就移动3位。

tell() 查看光标:光标是按照字节数的

truncate()  截取:内容是字节数,如果想做截断操作. 记住了. 要先挪动光标,挪动到你想要截断的位置,然后再进行截断。

with open('t2','rb')as f:
    print(f.read())
    print(f.seek(0))  # 文件头部
    print(f.read(1))
    print(f.tell())  # 查看光标的位置   数的是字节
with open('t2','r+',encoding='utf-8')as f:
f.truncate(9)  # 3个字符  指定字节之后的门内容全部删除

6.文件名修改

 import os  导入

os.rename()    重命名 第一个参数旧的名字,第二个是新的名字

os.remove()    删除这个文件

import os
os.rename('t2','t3')

with open('t3','r',encoding='utf-8')as f,
    open('t5','a',encoding='utf-8')as f1:
    msg = f.read()  # 将源文件复制一份
    msg = msg.replace('','')
    f1.write(msg)
import os
os.remove('t3')   # 删除原数据
os.rename('t5','t3')


with open('t3',mode='r',encoding='utf-8')as f,
        open('t5',mode='a',encoding='utf-8')as f1:
    for i in f:
        i = i.strip().replace('','爸爸')
        f1.write(i)
print(f.readline().strip())

总结:

r 只读 不能写
read() 读取全部
模式是r的时候,read(3)就是读取3个字符
模式是rb的时候,read(3)就是读取3个字节

readline() 读取一行
readlines() 存放在一个列表中

w 只写 不能读
覆盖写,先清空文件的内容,在写
当文件不存在的时候,创建一个文件

a 追加写 不能读
写的内容一直都在文件的末尾

r+ 读写
错误示范 先写后读
正确的是 先读后写

w+ 写读
写读的时候是读不到内容的,除非移动光标

a+ 追加写 读
写读的时候是读不到内容的,除非移动光标

最常用: r,w,a,r+,a+

with open('t2',mode='w',encoding='utf-8')as f:   #上下文管理   --- 面试题
msg = f.write('小强和刘申')
print(msg)
# 不用你自动关闭文件
原文地址:https://www.cnblogs.com/xianyuwangzhe/p/10256792.html