Python入门-文件的操作 & file对象的常用函数(方法) & mode的访问模式

文件的操作

mode的访问模式

模式描述
r以只读的方式打开文件。文件的指针将会放在文件的开头(默认模式)若文件不存在, 则报错
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从头开始编辑,原有内容会被删除。若文件不存在,则创建该文件
a打开一个文件用于追加。若该文件存在,新的内容将会被写入到已有内容之后。若不存在,则创建进行写入
r+打开一个文件进行读写,指针会放在文件的开头
w+打开一个文件进行读写,如果该文件已存在则打开文件,原有内容将被删除只能先写后读。如果该文件不存在,则创建该文件。
a+打开一个文件进行读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
b二进制模式

file对象常用函数(方法)

函数(方法)描述
file.close()关闭文件
file.tell()返回文件当前位置
file.seek(offset,whence)移动文件读取指针到指定位置(offset开始的偏移量,需要移动偏移的字节数;whence表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起,默认为0)
file.next()返回文件下一行
file.read(size)从文件中读取指定的字节数,如果未给size值或为负,则读取所有(当前字段)
file.readline(size)读取整行,包括 ‘\n’ 字符
file.readlines(sizeint)读取所有行并返回列表,若 sizeint > 0,则是设置一次读多少字节(若第一行5字节,sizeint只有大于5才会读取第二行),这是为了减轻读取压力
file.truncate(size)截取文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除必须要有写的操作
file.write(str)将字符串写入文件,返回的是写入字符串的长度
file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则需要自己加入每行的换行符
file.isatty()如果文件连接到一个终端设备返回True,否则返回False
file.flush()刷新文件内部缓存,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入
file.fileno()返回一个整型的文件描述符(file descriptor FD 整型),可以用在如os模块的read()方法等一些底层操作上

文件编码的概念

问:什么是编码?

答:编码就是一种规则集合,记录了内容和二进制间进行相互转化的逻辑

问:计算机只能识别0和1,那么丰富的文本是如何被识别并存储在硬盘中?

答:使用编码技术(密码本)将内容翻译成0和1存入

UTF - 8是目前全球通用的编码格式,除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。

ANSI 是windows系统的一个默认编码格式,表示跟随操作系统的语言版本,默认的中文编码是GB2312


文件的读取操作

open()可以打开一个已经存在的文件、或者创建一个新文件

# 语法
open(file, mode, buffering, encoding)
# file:要打开的目标文件名的字符串(可以包含文件所在的具体路径)
# mode:设置打开文件的模式(访问模式):只读、写入、追加等
# buffering : 若buffering的值为0,则不会有缓存。若buffering的值为1,则访问文件的时候会缓存行。若buffering的值为大于1的整数,表示缓存区的大小。若buffering的值为负,表示缓存区的大小为系统默认。
# encoding:编码格式(推荐使用IUTF-8)

# 示例
file = open('python.txt','r',encoding='UTF-8')
file = open('python.txt','r',1,'UTF-8')

注:此时 file 是 open 函数的文件对象,对象是一种特殊的数据类型,拥有属性和方法可以使用 对象.属性 或 对象.方法 对其进行访问

# file对象函数(方法)连续执行后面的(方法)接着前面的文件指针
f = open('文件路径','r',encoding='UTF-8')
print(f'读取指定字节:{f.read(3)}')
print(f'读取全部内容:{f.read()}')

# for循环读取文件行
for i in f:			# 每一个临时变量i,就记录了文件的一行数据
    print(i)

# 关闭文件
f.close()
# 若不关闭文件对象,同时程序没有停止运行,那么文件将一直被python程序占用

# 在 with open() 语句块中对文件进行操作,可以在操作完成后自动关闭close文件,避免忘掉close方法
with open('文件路径','r',encoding='UTF-8') as f:
    print(f.read(2))
    print(f.read())
# 使用函数
# 先标记要统计的单词
def count_word():
    count = 0
    mark_word = input('请输入你要统计的单词:')
    # 打开文件并读取文件,使用for循环与if结合获取结果
    with open('文件路径','r',encoding='UTF-8') as file:
        lines = file.readlines()
        for line in lines:
            for word in line.strip().split(' '):	# strip去掉前后空格以及换行符
                if word == mark_word:
                    count += 1
        print(f'您要统计的单词共出现了{count}次')

count_word()	# 调用函数

文件的写入操作

三步骤:

  • 1.打开文件
  • 2.使用 f.wirte() 写入文件
  • 3.内容刷新 f.flush()

直接调用 write(),内容并未真正写入文件,而是会积攒在内存中,称之为缓冲区,当调用 flush 的时候,或者执行完文件关闭,内容会真正写入文件(close() 内置 flush() 功能),这样做是避免频繁的操作硬盘,导致效率下降

f = open('文件路径', 'w', encoding='UTF-8')
f.write('hello!')
f.flush()
f.close()

文件的追加操作

几乎上同,使用 write() 进行追加,只需要把 mode 模式换成 a 即可


序列化和反序列化

我们可以将字符串直接写入到本地文件,但如果是一个对象(例如 列表、字典、元组等),需要把这个对象序列化才能写入,python中提供了 JSON模块 用来实现数据的序列化和反序列化,把内存中的数据转换成字节序列,保存到文件,就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
(后续会讲解json, 这里了解即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值