第八章:python文件操作

一、文件的编码

  • UTF-8是目前全球通用的编码格式

除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。

  • 为什么需要使用编码?

计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。

同时也需要编码, 将计算机保存的0和1,反向翻译回可以识别的内容。

二、文件的读取

    • open()打开函数

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐使用UTF-8)

2.read()方法

read()方法:

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

由于上面度过了,后面的读会接着往下读

# 读取文件  read() 读取十个字节
print(f'读取10个字节的结果:{f.read(10)}')
# 由于上面已经读取了一次,那么这一次读取会在上一次读取的位置往下进行读取
print(f'读取全部的内容的结果:{f.read()}')

readlines()方法:

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

readline()方法

readline()方法:一次读取一行内容

for循环读取文件行

以上这些读的操作都会受到前面读的约束,只要前面读了,后面的读都是接着往下读

3.close()关闭文件对象

with open语法:操作完后会自动关闭

案例练习

# 打开文件,以读取模式打开
f = open("D:/word.txt", "r", encoding="UTF-8")
# 方式1:读取全部内容,通过字符串count方法统计itheima单词数量
# content = f.read()  # 全部都读取出来,得到的字符串
# count = content.count("itheima")
# print(f"itheima在文件中出现了:{count}次")
# 方式2:读取内容,一行一行读取  读取出来每一行也是字符串
count = 0       # 使用count变量来累计itheima出现的次数
for line in f:
    line = line.strip()     # 去除开头和结尾的空格以及换行符  因为避免出先itheima\n不匹配问题
    words = line.split(" ")  # 就会变成list
    for word in words:
        if word == "itheima":
            count += 1      # 如果单词是itheima,进行数量的累加加1
# 判断单词出现次数并累计
print(f"itheima出现的次数是:{count}")
# 关闭文件
f.close()

三、文件的写入

1.这里的mode要修改为w,才是写入的操作

p直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

p当调用flush的时候,内容会真正写入文件

p这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

2.操作

•wirte(),写入内容

•flush(),刷新内容到硬盘中

3.注意事项:

•w模式,文件不存在,会创建新文件

•w模式,文件存在,会清空原有内容

•close()方法,带有flush()方法的功能,此时可以不用flush()

•再次写入的时候只会覆盖掉前面写的东西

四、文件的追加

而前面的w写入操作则是,当文件存在的时候,清空掉原有的内容。

案例练习

fr = open('D:/bill.txt', 'r', encoding='UTF-8')
fw = open('D:/bill.txt.bak', 'w', encoding="UTF-8")
for line in fr:
    # 把每一行的换行符去掉,因为我们要比较的就是最后几个字,换行符会影响
    line = line.strip()
    # 一定要定义给一个变量,原始的不修改  
    # 按照逗号进行分割字符串,变成list
    num = line.split(',')
    if num[4] == '测试':
        continue
    fw.write(line)
    # 由于前面strip的操作,所以需要手动地写出换行符
    fw.write('\n')
fr.close()
fw.close()  # 写出文件调用close()会自动flush()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值