基础详解-文件操作-python

本文介绍了如何在Python中进行文件操作,包括open函数的用法、不同模式下的读写、缓存策略,以及with open语句的使用。涵盖了文本文件和二进制文件的区别,以及常见的文件操作函数如read、write、writelines和close的示例。适合理解文件操作在网盘上传下载、头像上传等场景的应用。
摘要由CSDN通过智能技术生成


什么情况下会用到文件操作呢?比如现在各种网盘的上传下载资源,各种CMS中头像上传等等。

文件操作包括文件创建、读写、复制及文件夹相关操作,具体涉及系统函数open、close及os模块。

1、open

要操作文件,首先需要建立和文件的联系,此时需要用到系统提供的函数open:打开文件返回流,抛出OSError。

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=Tr
  • file:文件名或者文件路径+文件,我要知道打开哪个文件
  • mode:打开模式,具体模式详解表
  • buffering:缓存策略
  • encoding:编码(文本模式),编码和解码需要保持一致。
  • errors:可选性,编码错误处理方式
  • newline:指定换行符

2、相关知识点简介

2.1、文本文件和二进制文件

大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。

简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

2.2、文件的读和写

相对于我们python可执行程序

  • 读:从文件获取信息
  • 写:把信息写入文件

2.3、模式

描述
r以只读模式打开文件,文件的指针将会放在文件的开头
rb以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片,声音等
r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)
w以只写模式打开文件
wb以二进制格式打开文件,并且采用只写模式,一般用于非文本文件,如图片,声音等
w+打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限
wb+以二进制格式打开文件,并且采用读写模式,一般用于非文本文件,如图片,声音等
a以追加模式打开一个文件,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
ab以二进制格式打开文件,并且采用追加模式,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
ab+以二进制格式打开文件,并且采用追加模式,如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
x创建一个新文件用于写
  • 读文件,当给定的文件不存在时,会报错
  • 写文件,当给定的文件不存在时,以给定的名称新创建一个。

2.4、缓存

描述
0关闭缓存(二进制模式)
1行缓存(文本模式)
>1固定大小的块缓存

默认:

  • 二进制文件:固定大小的块缓存,大小由底层设备的块大小和io.DEFAULT_BUFFER_SIZE确定;大多数系统块大小为4096或者8192字节
  • 文本文件:交互式文本文件使用行缓存;其他同二进制文件

3、读相关函数

  • read():读取文件,返回文件内容
  • readable():文件是否可读
  • readline():读取一行
  • readlines():读取多行,返回列表

示例:

stream = open(r"i:/xx.txt")
print(stream.readable())
'''
# read
content = stream.read()
'''

'''
# readline()
while True:
    line = stream.readline()
    if not line:
        break
    print(line)
'''
lines = stream.readlines()
print(lines)
for line in lines:
    print(line)
stream.close()
  • readlines():打印的时候我没看到每行会多打印一行空行

4、写相关函数

  • writable():是否可写(修改)
  • write():写入
  • writelines():写入多行

示例:

stream = open(r"i:/w1.txt", 'w')
print(stream.writable())
s = 'hello aaa'
stream.write(s)
s = 'hello bbb'
stream.write(s)
s = '''
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
'''
stream.writelines(s)
stream.close()

追加:示例

stream = open(r"i:/w1.txt", 'a')
print(stream.writable())
s = 'sfasdfsf'
stream.write(s)
s = 'fsdafd'
stream.write(s)
s = '''
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
'''
stream.writelines(s)
stream.close()

5、close

close用于关闭流,释放资源。打开文件需要占用各种系统资源,如果不及时释放,会严重浪费系统资源,严重可能导致系统崩溃。

6、with open as 变量名

语法:

with open(...) as 变量名	

该语法优点在于,不需要在执行close函数,文件操作完成之后,自动帮我们关闭流,释放资源

7、文件复制

示例:简单图片复制

with open(r'i:/1.png', 'rb') as source:
    content = source.read()
    with open(r'i:/2.png', 'wb') as target:
        target.write(content)

源代码仓库:https://gitee.com/gaogzhen/python-study

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值