4.1使用python批量处理文件

本文详细介绍了Python中的文件操作流程,包括打开、写入、读取、创建/追加模式、遍历文件、进制模式以及文件修改方法,展示了如何使用seek、tell和flush等函数处理文件指针和内存缓存。
摘要由CSDN通过智能技术生成

4.1.文件操作流程

4.1.1.打开文件

f = open(filename)

4.1.2.写操作

f.write("我是帅哥")

4.1.3.读操作

f.read()

4.1.4.保存并关闭

f.close()

4.2.创建、只读、追加

1.r只读模式

# f = open("name_list",mode="r")  //设置mode为读
# f = open("name_list","r")   //设置mode为读
f = open("name_list")   //如果不设置的话,默认的模式也是读,三种方法都可以
print(f.readline())      //读一行数据,当我读了一行数据以后光标就会移动到下一行
print("---------")     //打印一行分隔符
print(f.read())       //此时你会发现,你读的数据只有三行,同时读的时候不能写

打印结果:

我是帅哥

---------
我是帅哥
我是帅哥
我是帅哥

2.w创建模式,若文件已存在,则覆盖旧文件

f = open("name_list", mode="w")  //打开文件name_list,模式为写,如果文件不存在则创建一个name_list,如果文件存在则会覆盖
f.write("我是帅哥\n")
f.write("我是帅哥\n")
f.write("我是帅哥\n")
f.write("我是帅哥\n")
f.read()   //只能读或者写,不能同时又读又写,否则会报错
f.close()      //关闭文件并保存

3.a追加模式,新数据会写道文件末尾

f = open("name_list", "a")  //打开文件,模式为追加
f.write("wwwwww")     //在文件中追加写内容而不会覆盖之前的内容
f.write("oooooo")
f.read()     //同样写的时候不能读
f.close()

4.3.遍历文件

f = open("name_list",encoding="utf-8")      //打开文件,mode为只读,并且告诉解释器解读文件的类型为utf-8格式
for line in f:            //循环文件
    line = line.split()     //将一个字符串,转换成列表,并且间隔为空格
    height = int(line[3])    //找到列表当中下标为3的值,并且将它转化为整型
    weight = int(line[4])   //找到列表当中下标为4的值,并且将它转化为整型
    if height >= 170 and weight <= 50:   //判断高度是否大于170,体重是否小于50
        print(line)         //如果符合则被输出

4.4.进制模式

4.4.1.rb       2进制只读模式

你都出来的数据就是bytes字节类型了,那么你写进去的也必须是bytes格式

f = open("3a6fa28a3ca13ba6938ee783dd6ff53.jpg", "rb")    //打开一个图片,但是图片显然没有具体的编码格式,所以用
for line in f:
    print(line)

4.4.2.wb      2进制创建模式,若文件已存在,则覆盖旧文件

f = open("wb_file", "wb")    //创建一个文件,以wb格式打开啊
b = "帅哥"
f.write(b.encode("utf-8"))   //b字符串以utf-8格式写入文件中,写入正常
f.write(b.encode("gbk"))   //b字符串以gbk格式写入文件中,写入异常,因为文本是以utf-8格式读的,而你写入的gbk格式的字符串,所以出现乱码

4.4.3.ab      2进制追加模式,新数据会写到文件末尾

f = open("wb_file", "ab")   //打开一个文件,mode为ab
b = "iwbf"
f.write(b.encode("utf-8"))   //b字符串以utf-8格式追加写入文件中,写入正常

4.5.其它功能

4.5.1.seek   移动光标

f = open("wb_file", encoding="utf-8")            //打开文件,用只读的模式,读取文件格式为utf-8
f.seek(6)    //从起始点移动光标到第六个字节的地方,注意:gbk格式的中文占2个字节,utf-8的中文占3个字节,最后都有个换行符,也占一个字节,也不可撕裂字符例如:seek(9),要读到是必须3+3+1+1+3,而seek(9),seek(10),都会报错
print(f.readline())   //读一行数据,帅哥占了6个字节,所以读到的结果为:2

f = open("wb_file", 'w', encoding="utf-8")
f.write("hello1\n")
f.write("hello2\n")
f.write("hello3\n")
f.seek(10)           //移动光标到第十个字节
f.write("-----")     //写入数据-----,移动光标后写入的数据将原来的数据覆盖了

4.5.2.tell   返回光标当前所在位置

print("返回光标当前位置:", f.tell())   //打印结果为:返回光标当前位置: 24

4.5.3.flush  将文件从内存buffer(缓存)里强制刷新到硬盘

f = open("flush", "w")
f.write("line1\n")
f.write("line2\n")
f.flush()          //此时,写入的数据是放到缓存当中,还没有写进硬盘中,如果此时断电了,那么数据就会丢失,使用flush可以将数据从缓存中强制写道硬盘中。

4.6.混合模式

4.6.1.w+   写读:创建一个新文件,写一段内容,可以再用写的内容读出来用(平常不怎么使用)

4.6.2.r+     读写:能读能写,但都是写在文件最后,跟追加一样

f = open("nemo", "r+")  //打开文件以读加写的格式
print(f.readline())    //先读一行数据
f.seek(f.tell())     //此时读的光标在第一行末尾,如果加上这行代码,表示将光标移动到当前位置,然后再进行写操作,那么就会在第一行后面写新数据
f.write("新数据")    //读有一个光标,写也有一个光标,如果不写上面一行代码,则写的光标在最后一位,做的操作为,在文件末尾,写一个新数据

4.6.3.a+    追加读:文件打开时光标会在文件尾部,写的数据全是追加的形式(平常不怎么使用)

4.7.文件修改

不是覆盖,而是往后挤。

方法1:小文件方便,大文件太占用内存

f = open("nemo", "r+")   //因为涉及到读和写所以用读写
# 1.先加载到内存  
data = f.read()                 //将文件内容读到变量中,意味着此时文件内容以字符串的形式存在于内存中
new = data.replace("帅哥", "iwbf")         //然后将原文件内容里的帅哥改为iwbf,此时你获得了一个修改过的字符串形式的文件,存在了new中
print(new)      //打印一下看看是否修改完成
# 2.清空文件
f.seek(0)        //移动到文件的开头
f.truncate()    //截断文件,如果()内加上100,表示截断100字节后的内容,可能会出错,正好截到一半的字符。

# 3.把新内容写回硬盘
f.write(new)    //将new内容写入文件
f.close()          //关闭并保存文件

方法2:占用硬盘空间,你会同时拥有两个一模一样大小的文件

另外一种方法,创建两个文件,打开老文件,然后按行写入到新文件,并且判断是否有我需要修改的值,如果有,修改后写入,没有,直接写入,然后一直循环到文件结尾。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值