用Python批量操作文件

214 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

🌞欢迎来到python的世界
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年4月5日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!

目录

🍈 一、不同字符编码间的转换

🍉二. 文件操作

🍈 一、不同字符编码间的转换

windows系统的默认编码是GBK, 如果你把⼀段在windows系统上⽤gbk编码的字符发

送到mac电脑 上, mac默认编码是utf-8, 那这段⽂字是乱码显示的。 如何实现在mac上正常显示这段 gbk文本呢?

编码与解码

1.把任意编码转换成unicode的过程叫做解码

>>> s="卿云"
>>> s="卿云"#unicode格式
>>> s.encode("utf-8") #将其编码成utf-8
b'\xe5\x8d\xbf\xe4\xba\x91'

2.把unicode转换成的任意编码过程叫做编码

>>> s
'卿云'
>>> s.encode("utf-8").decode("utf-8")#把utf-8编码的字符在转化成unicode
'卿云'

>>> s
'卿云'
>>> s.encode("utf-8") #将其编码成utf-8
b'\xe5\x8d\xbf\xe4\xba\x91

#会变成bytes字节格式,bytes字节类型是用16进制表示的,像\xe5这样两个16进制数是代表一个字节(因为一个16进制数占4位)

字节类型到底是什么

字节类型其实就是二进制数,只不过为了易于理解,常用16进制数表示。

🍉二. 文件操作

用Python操作文件也不多

f=open(filename)  #打开文件
f.write("我叫卿云") #写文件
f.read()  #读文件
f.close() #保存并关闭

文件打开模式

r 只读模式

w 创建模式,若⽂件已存在,则覆盖旧⽂件

a 追加模式,新数据会写到⽂件末尾

创建文件

f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='w')  #在文件夹中复制地址时,文件夹中的地址是用 \ 来分隔不同文件夹的,而Python识别地址时只能识别用 / 分隔的地址。
f.write("我叫卿云\n") #写文件
f.write("我喜欢打乒乓球\n") #写文件
f.write("我喜欢zqy\n") #写文件
f.close() #保存并关闭

只读模式

f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='r')
print(f.readline())#读一行
print('-----分隔符-----')
data=f.read()
print(data)
f.close() #保存并关闭


结果
卿云  202018081

-----分隔符-----
文竹  202018082
zxq   202018083

追加模式

f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='a')
f.write("zz    202018085\n")
f.close() #保存并关闭

循环文件

f = open(file='C:/Users/qingyun/Desktop/兼职⽩领学⽣空姐模特护⼠联系⽅式.txt',encoding="utf-8",mode='r')
for line in f:
     line = line.split()
     name,addr,height,weight,phone = line
     height = int(height)
     weight = int(weight)
     if height > 170 and weight <= 50: # 只打印身⾼>170 and 体᯿<=50print(line)
f.close()

结果
['⻢纤⽻', '深圳', '173', '50', '13744234523']
['罗梦⽵', '北京', '175', '49', '18623423421']
['叶梓萱', '上海', '171', '49', '18042432324']

⼆进制模式操作⽂件

上⾯操作的只是⽂本⽂件 ,但是如果遇到视频呀、图⽚呀,你直接打开的话会报错

是因为,open()有个encoding参数,默认是None, 是⽤来告诉解释器,要操作的这个⽂件 是什么编码。 不填的话,就⽤解释器默认编码,即utf-8。

如果你是⼀个gbk编码的⽂件 ,就必须指定 encoding=gbk

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

f = open("gbk_file",encoding="gbk")
for line in f:
 print(line)

但是像图⽚、视频,是有⾃⼰特殊的编码的,⽽⾮什么unicode\utf-8这样的⽂本编码 。 所以要操作这

样的⽂件 ,你⽤utf-8什么的去解,⾃然会报错。

如何处理图⽚、视频⽂件呢?

可以⽤2进制模式打开⽂件

rb 2进制只读模式

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

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

这样,你读出来的数据,就是bytes字节类型了,当然写进去的也必须是bytes格式了

f = open("gbk_file2","wb")
f.write("哈".encode("gbk") ) # 写⼊的⽂本要⽤字节类型

2.10 练习题**-**全局⽂本检索替换

写⼀个脚本,允许⽤户按以下⽅式执⾏时,即可以对指定⽂件内容进⾏全局替换,且替换完毕后打印替

换了多少处内容

写完后的脚本调⽤⽅式:

python your_script.py old_str new_str filename

import sys
old_str=sys.argv[1]
new_str=sys.argv[2]
filename=sys.argv[3]
#1. load into ram
f=open(filename,"r+")
data=f.read()
#2. count and replace
old_str_count=data.count(old_str)
new_data=data.replace(old_str,new_str)
#3. clear old filename
f.seek(0)
f.truncate()
#4.save new data into file
f.write(new_data)
print("成功")
print(f'''成功替换字符'{old_str}' to '{new_str}',共{old_str_count}处...''')