详解Python中的File(文件)操作

Python中的File(文件)操作

针对磁盘中的文件的读写。文件I/O I 输入(input) O输出(Output)

**文件操作步骤:**1.打开文件 2.读写文件 3.关闭文件

写入文件的操作:

(把大象装进冰箱)

  1. 打开文件 open() ==> 打开冰箱
  2. 写入内容 write() ==> 把大象装进冰箱
  3. 关闭文件 close() ==> 关闭冰箱门
读取文件的操作:

(把大象从冰箱中取出)

  1. 打开文件 open() ==> 打开冰箱门
  2. 读取内容 read() ==> 把大象拿出来
  3. 关闭文件 close() ==> 关闭冰箱门

一、文件操作相关函数

1. open() 打开文件

格式: open(文件的路径,打开的方式,[字符集])

参数 encoding: 可选参数,设置文件的字符集

如果是一个二进制的文件时,不需要设置字符集
        encoding='utf-8'

举例①:

# 1.打开文件
# 打开文件,创建了一个文件对象
fp = open('./1.txt','w',encoding='utf-8')
print(fp,type(fp))


# 2.写入内容
# 使用文件对象,调用 write() 方法 写入内容
fp.write('hello world')


# 3.关闭文件
# 使用文件对象,调用close() 方法 关闭文件
fp.close()

举例②:

# 1. 打开文件
# 打开文件,创建了一个文件对象
fp = open('./1.txt','x',encoding='utf-8')

# 如果使用r模式打开一个不存在的文件,则会引发错误
#FileNotFoundError: [Errno 2] No such file or directory: './2.txt'

# 如果使用x模型打开一个已经存在的文件,则会报错
# FileExistsError: [Errno 17] File exists: './1.txt'


# 2. 读取文件内容
# 使用文件对象 调用 read() 方法
res = fp.read()
print(res)


# 3. 关闭文件
# 使用文件对象,调用close() 方法 关闭文件
fp.close()

举例③:

# 写入文件操作
# 1。打开文件
fp = open('./1.txt','a',encoding='utf-8')
# 2。写入 文件
fp.write('\n你好')
# 3。关闭文件
fp.close()

# 读取操作
# 1。打开文件
fp = open('./1.txt','r',encoding='utf-8')
# 2。读取文件
res = fp.read()
# 3。关闭文件
fp.close()
print(res)

2. seek() 设置文件指针的位置

fp.seek(0)    # 把文件指针设置到文件的开头位置
fp.seek(10)   # 设置文件指针的位置
fp.seek(0,2)  # 0,2是把文件指定设置在文件的末尾
seek() 设置文件指针位置
with open('./test/4.txt', 'r+', encoding='utf-8') as fp:
    # a+模式,指针默认在文件的最后,所以直接读是读取不到内容的
    # fp.seek(0)  # 把文件指针设置到文件的开头位置
    fp.seek(10)   # 设置文件指针的位置
    fp.seek(0,2)  # 0,2是把文件指定设置在文件的末尾
    # fp.write('\n00000')
    res = fp.read()

3. write() 写入内容

格式:文件对象.write(字符串)

int类型无法写入

4. writelines() 写入容器类型数据

格式:文件对象.write(容器类型数据)

注意:容器类型数据中的元素也必须是可写入的字符串类型

5. read() 读取内容

格式:文件对象.read() 从当前指针位置读取到最后

格式:文件对象.read(读取的字节数) 可以读取指定长度的字符

6. readline() 读取一行

格式: 文件对象.readline() 一次读取一行

格式: 文件对象.readline(字节数) 一次读取一行中指定长度的字节

7. readlines() 读取所有行

格式: 文件对象.readlines() 读取所有行,每一行作为一个元素,返回了一个列表

格式:文件对象.readlines(n) 按照行进行读取,可以设置读取的字节数,设置的字节数不足一行按一行算

读取相关函数
with open('./test/4.txt','r',encoding='utf-8') as fp:
    fp.seek(3)  # 设置指针的位置
    res = fp.read()  # 默认从当前指针开始读取到最后
    res = fp.read(3)   # 设置读取的字节长度
    res = fp.readline()  # 一次只读取一行内容
    print(res)
    res = fp.readline(3) # 可以读取当前行中的指定字节数
    res = fp.readlines()  # 一次读取多行数据,每一行作为一个元素,返回一个列表
    res = fp.readlines(6)  # 按照行进行读取,可以设置读取的字节数,设置的字节数不足一行按一行算
    print(res)

8. close() 关闭文件

格式:文件对象.close() 关闭打开的文件

9.truncate() 截断文件内容

with open('./test/4.txt','r+',encoding='utf-8') as fp:
    res = fp.truncate(5)
    # 默认从文件的首行的首个字符开始进行截断,截断的长度为size个字节数,
    # size如果为0,则从当前位置截断到最后

二、文件操作的高级便捷写法

with open(文件路径,打开模式) as 变量:
    变量.操作()
#不需要写关闭
with open('./1.txt','r+',encoding='utf-8') as fp:
    res = fp.read()
    print(res)
    
    
with open('./1.txt','r+',encoding='utf-8') as fp:
    # 设置指针的位置
    fp.seek(20)  # 设置当前指针的位置
    fp.write('cc')
    fp.seek(0)  # 设置当前指针的位置 seek(0),最开始的位置
    res = fp.read()
    print(res)

w+ 即可读又可写(注意w模式的特点,是打开文件后直接清空了文件)
r+ 即可读又可写
a+ 追加写,并且可读
x+ 异或

三、文件的路径:

文件路径 路径 url 统一资源定位符

相对路径: 就像给别人指路一样: 在某某大厦的对面
针对文件的相对路径的表示,从当前目录开始计算
❂ 1.txt ==> 具体文件前没有任何表示时,默认为当前目录 和 ./1.txt 是一个位置
❂ ./1.txt ==> ./ 代表当前目录中的 1.txt
❂ …/1.txt ==> …/ 代表当前目录中的 上一级目录中的1.txt

绝对路径: 就像买东西写收货地址一样: 北京市海淀区中关村大街128号xxx小区,xxx号楼xx单元xx室
windows: c:/users/appdata/1.txt
Linux: /user/home/yc/1.txt

四、打开的模式:

1. 基础模式: w r x a

w w模式 write 写入模式
(1) 文件如果不存在,则创建这个文件
(2) 文件如果存在,则打开这个文件,并且清空文件内容
(3) 文件打开后,文件的指针在文件的最前面

r r模式: read 读取模式
(1) 如果文件不存在,则报错
(2) 文件如果存在,则打开文件
(3) 文件指针在文件的最前面

x x模式: xor 异或模式
(1)文件不存在,则创建这个文件
(2)文件已存在,则报错(防止覆盖)
(3)文件的指针在文件的最前面

a a模式: append 追加模式
(1)文件不存在,则创建文件
(2)文件如果存在,则打开文件 (和w模式的区别在于。a模式打开文件后不会清空)
(3)文件指针在当前文件的最后

2. 扩展模式:

b b模式 bytes 二进制
+ +模式 plus 增强模式(可读可写)

3. 文件操作模式的组合:

w,r,a,x
wb,rb,ab,xb,
w+,r+,a+,x+
wb+,rb+,ab+,xb+

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值