python的文件操作

python中操作文件

在python中操作文件总体分为三步:

  1. 打开文件
  2. 读写文件
  3. 关闭文件
    文件读取的操作汇总:
    在这里插入图片描述

打开文件

我们可以通过python内置的open()函数打开一个已存在的文件或者创建一个新的文件。
open函数语法:
在这里插入图片描述
name是要打开的目标文件名的字符串(可以包含文件的具体路径)路径需要使用**‘/’**或者\\或者在路径前面加上r保持字符的原有意思(最常用),因为在python中‘\’是转义字符,使用的话会无法读取\后面的内容会报错
mode是打开文件的模式(访问模式):有只读,写入,追加等。
encoding是编码格式,推荐使用utf-8(较常用)。注:因为encoding并不是在第三个,所以必须使用关键字方式传参。
示例:返回一个文件对象f,可以使用文件相关的方法。

#方式1(三种路径的写法),其他的会报错
f=open("C:/Users/cwy/OneDrive/Desktop/test.txt","r",encoding="UTF-8")
# 方式2
f=open("C:\\Users\\cwy\\OneDrive\\Desktop\\test.txt","r",encoding="UTF-8")
# 方式3
f=open(r"C:\Users\cwy\OneDrive\Desktop\test.txt","r",encoding="UTF-8")
print(type(f))

在这里插入图片描述

常用的三种访问模式:
在这里插入图片描述

读操作的相关方法

读操作无法无法打开不存在的文件。

read()方法

语法格式:文件对象.read(num)
num是从文件中读取数据的长度,单位是字节,如果没有num,默认读取文件中的全部内容,返回一个字符串类型的数据。
注意:如果在一个对象中多次调用read函数,那么上一个read会从上一个read的结尾处开始读取。

f=open(r"C:\Users\cwy\OneDrive\Desktop\test.txt","r",encoding="UTF-8")
print(type(f))
b=f.read(3)
c=f.read()
print(type(b),b)
print(type(c),c)

在这里插入图片描述

readlines()方法

语法格式:文件对象.readlines()
readlines()方法可以按照行的方式将整个文件中的内容读出,并返回一个列表,每一行的数据就是一个元素。
如果是readline()方法只能读出第一行的内容,返回一个字符串类型的数据。
注意:同一个文件对象会接着之前读取过的地方向下读取数据,如果之前使用read()方法读完了内容,再使用readlines方法读取的就是一个空的列表了。

f=open(r"C:\Users\cwy\OneDrive\Desktop\test.txt","r",encoding="UTF-8")
print(type(f))
c=f.readlines()
print(type(c),c)

在这里插入图片描述

for循环读取文件行

在这里插入图片描述

f=open(r"C:\Users\cwy\OneDrive\Desktop\test.txt","r",encoding="UTF-8")
print(type(f))
for line in f:
    print(line)

在这里插入图片描述

关闭文件对象

因为如果不关闭文件对象,那么这个文件就会一直被python程序占用,所以我们需要在使用完成之后关闭这个文件对象。

使用close() 方法关闭文件

语法格式:文件对象.close()

with open语句

语法格式:

在这里插入图片描述
通过with open语句块对文件进行操作,可以在语句块执行结束后自动关闭文件,可以避免忘记使用close方法。

with open(r"C:\Users\cwy\OneDrive\Desktop\test.txt","r",encoding="UTF-8") as f:
    print(f.read())
print(f.read())

因为语句块执行完成之后文件对象自动关闭,所以后面无法再使用。
在这里插入图片描述

文件的写入操作

使用open方法的w模式进行写入。

写入操作如果要打开一个不存在的文件则会新建一个文件,而且文件写入操作会覆盖文件中原有的内容。

注意:文件写入调用write方法,但是调用了write方法之后,内容并没有被真正的写入文件中,而是被积攒在程序的内存中,我们称之为缓冲区,只有当调用完flush方法之后数据才会真正的被写入到文件之中去。这样可以避免频繁的操作硬盘导致效率降低(攒一堆,一次性写入磁盘)。

注意:close()方法内置了flush方法,如果使用了close方法,flush方法可以省略,但是如果没有调用close()方法,而且需要将缓冲区的内容写入文件中时就必须要调用flush方法。

在这里插入图片描述

f= open(r"C:\Users\cwy\OneDrive\Desktop\test1.txt","w",encoding="UTF-8")
a=f.write("hello")
f.close()

在这里插入图片描述

文件的内容追加方式

通过open的a模式进行追加

a模式下,如果文件不存在同样会创建文件。而且不会覆盖文件中原有的内容,而是会将写入的内容追加在之前内容的后面。可以使用\n来进行换行。
在这里插入图片描述

f= open(r"C:\Users\cwy\OneDrive\Desktop\test1.txt","a",encoding="UTF-8")
a=f.write("hello")
f.close()

在这里插入图片描述

文件操作的综合案例

在这里插入图片描述
在这里插入图片描述
首先将内容写入到bill中,使用三引号可以多行写入

f= open(r"C:\Users\cwy\OneDrive\Desktop\bill.txt","a",encoding="UTF-8")
# 使用三引号可以输入多行内容
a=f.write("""name, date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮、2022-01-02,300000,收入正式
周杰轮,2022-01-03,100000,消费测试
林俊节2022-01-01.300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油2022-01-02、500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿2022-01-02,300000,消费,测试
王力鸿2022-01-03.950000收入,正式
刘德滑,2022-01-01,300000.消费,测试
刘德滑,2022-01-02,100000消费,正式
刘德滑,2022-01-03,300000消费,正式""")
f.close()

在这里插入图片描述
然后将内容从bill中读出然后写入billr中

fa= open(r"C:\Users\cwy\OneDrive\Desktop\bill.txt","r",encoding="UTF-8")#读出内容对象
fw= open(r"C:\Users\cwy\OneDrive\Desktop\billr.txt","w",encoding="UTF-8")#写入内容对象
word =""#全局变量
for line in fa:#遍历读出内容
    word=line;
    print(type(word),word)
    word=word.strip()#去除最后的换行符
    msg=word.split(",")#将内容分隔,用于判断
    print(msg)
    for x in msg:#遍历列表
        if x=="正式":
            fw.write(word)//写入缓冲区
            fw.write("\n")
fa.close()
fw.close()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老年断牙人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值