python文件操作
按文件中数据组织形式,可把文件分为文本文件和二进制两大类。
1.文本文件:存储的是普通“字符”的文本,python默认的是unicode字符集,可以用记事本打开。
2.二进制文件:二进制文件把数据内容用“字节”进行存储,无法用记事本,即使打开了,也是乱码,必须使用专用的软件解码。常见的mp3,mp4,jpg,doc文档等等。
3.操作方式有如下方式:
模式 | 描述 |
---|---|
r | 读read 模式 |
w | 写wirte模式,若文件不存在则创建,如果文件存在,则把旧内容抹掉,重新写 |
a | 追加append,如果文件不存在则创建,如果文件存在,在文件末尾追加 |
b | 二进制binary模式(可与其他模式组合使用) |
+ | 读、写模式(可与其他模式组合使用) |
备注:如果没有带模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。常见的组合有r、rb、r+、rb+、w、wb、w+、wb+、a、ab、a+、ab+。 |
4.创建文件对象
f=open(r”a.txt”,”a”,encoding=”gbk”) #文件名换成”\new.txt” 直接报错
s=”哈哈\n天神下凡\n”
f.write(s)
f.close() #一定要关闭文件
说明: 为什么要带r””
r””是保持字符串原始值的意思,就是说不对其中的符号进行转义。因为windows下的目录字符串中通常有斜杠"",而斜杠在Python的字符串中有转义的作用。例如:\n表示换行如果路径中有\new就会被转义。加上r就是为了避免这种情况。”但是本身windows创建文件的时候,就自带这个规则的。带了\就创建不了的。f.close()就默认使用了flush()
过程:
- 创建文件对象
- 写入数据
- 关闭文件对象
5.中文乱码
windows系统默认的编码方式是GBK,Linux系统默认的编码是utf-8。造成乱码不一致的原因就是编码和解码不一致,比如你编码的是gbk,解码的时候是utf-8,这样就会造成乱码。
6.write和writelines的区别,write是写入字符串,writelines写入的是序列,比如列表,它会迭代帮你写入文件。 f.writelines([“哈哈1\n”, “哈哈2\n”])
7.with(关键字)用法,也叫上下文管理器。
list1=["aa","bb","cc"]
for i in range(0,len(list1)):
with open(list1[i]+".txt","a") as f:
f.writelines(list1)
8.文本文件的读取
read(size)
#从文件中读取size个字符,并作为结果返回。size为空,则全部返回。字母和中文都算一个字符。
#如果要读取每一行的话,代码如下
with open(r"bb.txt","r",encoding="utf-8") as f:
for i in f:
print(i,end="")
9.利用列表推导式处理文件
#从aa文件读出来,并加上#1,#2
#with 上下文管理器
with open(r"aa.txt","r",encoding="utf-8") as f:
a=f.read()
#字符串按指定字符转列表
list=a.strip("\n").split("\n")
with open(r"dd.txt","w+",encoding="utf-8") as f:
#列表推导式,enumerate可把数据对象转化为索引序列
c=[value+" #"+str(key)+"\n" for key,value in enumerate(list)]
f.writelines(c)
10.read、readline和readlines的区别
read(): 一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长
readline():每次读取一行内容。内存不够时使用,一般不太用,用得很少。
readlines():一次性读取整个文件内容,并按行返回到list,方便我们遍历,用的比较多。
11.二进制文件的复制
with open(r"22.png","rb") as f:
with open(r"22_cover.png","wb") as w:
for lines in f.readlines():
w.write(lines)
print("over")
12.pickle序列化和反序列化
import pickle
with open(r"10.dat","wb") as f:
a1=66
a2="dasd"
a3=[12,"dasd","发大水的"]
pickle.dump(a1,f)
pickle.dump(a2,f)
pickle.dump(a3,f)
with open(r"10.dat","rb") as f:
a1=pickle.load(f)
a2=pickle.load(f)
a3=pickle.load(f)
print(a1,a2,a3)
13.图片复制
with open(r'1.png','rb') as f: #先打开1.png这个图片
with open(r'1_copy.png','wb') as ff: #如果没有1_copy.png,就创建这个文件,然后写入
for line in f.readlines():
ff.write(line)
14.os操作
import os
os.startfile(r'D:\软件安装位置\Tencent\WeChat\WeChat.exe')
os.system(r’notepad.exe’)
15.输出当前工作目录下.py文件,并且输出文件名
#coding=utf-8
#输出该工作目录下的所有.py文件,并输出文件名
import os
path=os.getcwd()
# file_list=os.listdir(path)
# for file_name in file_list:
# if file_name.endswith('.py'):
# print(file_name)
file_list = [file_name for file_name in os.listdir(path) if file_name.endswith('.py')]
print(file_list)
16.shutil模块
import shutil
shutil.copy('1.py','1_copy.py')
shutil.copytree('打算/111','666')
shutil.make_archive('打算/111','zip','666')