python-文件操作

目录

Python文件对象的基本操作

打开与关闭文件

open()函数的参数

file

mode

encoding

二进制文件

文件的读写方法

假文件读写操作

上下文管理

os模块


Python文件对象的基本操作

打开与关闭文件

打开文件:使用open()方法打开文件,并返回文件对象,在对文件处理的过程中都需要这个函数的返回的对象。为了方便使用打开的这个文件对象,一般将这个对象赋值给一个变量f = open()

关闭文件:在每一次使用open()方法打开文件之后,都需要关闭打开的文件。关闭的方法,使用文件的close()方法。

open()函数的参数

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

常用参数说明

file

指定打开文件名及路径,可以是相对路径,也可以是绝对路径。相对路径就是当前工作的目录。

mode

指定文件的打开模式,不同的模式决定了对文件不同操作形式。

三种基本模式

  • r:只读文本
  • w:清除写入模式,清除原来文件中内容后重新写入新的内容,注意使用这个模式时,最好备份原来的文件,以防修改原来文件内容后无法还原。
  • a:追加写入模式,不同于w的是,这种写入不会清除原来文件的原有内容,只是在原来的基础后面添加内容,打开文件后指针在行尾。

其他模式

  • +:在r/w/a后面使用+打开文件后文件时,表示文件可读可写。
  • r+:打开一个文件用于读写。文件指针将会放在文件的开头。可在文件开头写入内容,不会清除原来的文件内容,在文件首位添加内容。
  • b:二进制读写文件。建议特殊文件打开时都以二进制读取,如图片视频等

规则

  • 如果不指定mode参数,open默认缺省值为’r’,只读文件。
  • 如果参数为写入’w’或’a’,打开的路径下没有这个文件时,则会在指定路径或默认路径下创建这个文件后再执行写入代码。
  • r/w/a三种模式不能混合使用,但都可以和b/+结合使用。

encoding

指定读写文件时使用的字符编解码方式。

调用open函数时,如果传入了encoding参数值:使用write写入内容到文件时,写入的内容会使用ope()函数中指定的encoding编码写入内容;调用read从文件中读取内容时,使用指定的encoding解码读取文件内容。如果调用的时候没有传入encoding参数值,open函数使用系统默认的编码方式,如中文Windows系统中使用cp936(即gbk编码)。

二进制文件

就文件而言,不管是文本文件还是视频图片等其存储的底层都是在字节中,不存在文件的分类,都是二进制。在以文本模式打开文件后,后面的读写文件方法其底层实现都会自动进行对应的字符串(string对象)和对应的字节串(bytes对象)的转换。所以我们可以直接通过指定open函数中mode参数,让其直接读写文件的二进制字节串到bytes对象中。

所以在对文件读写时,可在上面三种模式的后面添加b,在打开和创建文件时以二进制读写。以二进制写入内容时,需要在写入内容的参数中指定二进制写入:f.write(b’写入内容’)

# 使用二进制写入文件内容
f = open('读写文件.txt', 'wb')
# 写入内容全是英文字符串时有三种方式
# 1、写入字符串前加b,指定为bytes写入,因为所有的字符串都是英文,英文都支持ASCII码,所以指定编码方式可以省略
f.write(b'hello\n')

# 2、对写入字符串使用指定编码方法的方式写入
f.write('hello world\n'.encode('utf8'))

# 3、指定字节串方式存入,字符串后面指明编码方式
f.write(bytes('I hope everyone is well',encoding='cp936'))

f.close()

写入内容为中文字符串时只支持上面英文写入方法的后两种,如果使用第一种则会报错,因为ASCII码只存储了英文字符

文件的读写方法

f.read()

从文件中读取指定大小的内容文件,括号里面的参数为读取内容的字符串长度,未指定或未负数时,读取所有内容。

f.readline()

读取一行内容,包括换行符\n,括号中指定参数,同f.read()

f.readlines()

读取所有的文件内容,并以列表的形式返回,参数同上。

f.write()

写入内容,参数为写入的文本内容

f.writelines()

写入多行内容,可以使用换行符写入,或者使用三引号写入固定格式的多行内容。

f.tell()

返回指针所在位置

f.seek()

移动指针所在位置

f.truncate()

从文件的首行首字符开始截断,截取指定长度字符串后将后面其余的字符删除,默认不指定时删除所有。

f.flush()

刷新文件缓存,直接将缓冲区的内容立即写入文件,不是等待输出缓冲区写入

f.flush()演示:在运行上面的代码的时候,每个5秒的时间打开文件查看,发现内容不是一次写入的,会5秒写入一次并刷新。

import time
fi = '1234567890'
f = open(r'C:\Users\JS-143\Desktop\测试使用.txt',mode='r+')
for i in range(5):
    f.write(fi)
    time.sleep(5)
    f.flush()

假文件读写操作

假文件的操作需要导入io模块,假文件的读取方法:f.getvalue()。

import io

f1 = io.StringIO()    # 创建文本模式的假文件
f1.write('文本模式')

f2 = io.BytesIO()    # 创建二进制模式的假文件
f2.write('二进制模式'.encode('utf8'))

print(f1.getvalue())
print(f2.getvalue().decode('utf-8'))

注意:假文件一旦关闭,文件就会消失,不会被保存。

import io

s = '你好,张先生'
xingshi = list('张王李赵钱孙胡')
people = io.StringIO(s)  # 将不可变字符串对象变为可变字符串对象

for x in xingshi:
    people.seek(s.find('先') - 1)  # 设置需要改变的子字符指针
    people.write(x)  # 修改指针所在的字符串
    print(people.getvalue())

上下文管理

如果在开发程序中进行读写文件后没有使用close方法关闭文件,可能会造成意想不到的问题。对此可以使用with语句打开文件,这样就不需要我们自己调用close()方法关闭文件,当代码跳出with语句之后,python解释器会自动调用close()方法关闭文件。

语法格式

with open(files) as f:
    语句体

示例

files = '''
仁义一生,死于诏狱,难言不得死所,何憾于天,何怨于人?
惟我身副宪臣,曾受顾命,孔子云:托孤寄命,临大节而不可夺。
持此一念,终可以见先帝于在天,对二祖十宗与皇天后土、天下万世矣!
大笑大笑还大笑,刀砍东风,于我何有哉!
'''

with open(r'C:\Users\JS-143\Desktop\测试使用.txt',mode='r+') as f:
    f.writelines(files)
    f.read()
print(f.closed)

查看文件是否关闭的方法:f.closed    #  返回bool值。

上下文管理方法的原理:使用with语句时,底层代码调用了魔法方法:__enter__ 和 __exit__

os模块

os模块中提供了多种操作文件和文件目录的方法

菜鸟:https://www.runoob.com/python3/python3-os-file-methods.html

python官网:https://docs.python.org/zh-cn/3.8/library/os.html?highlight=os#module-os

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值