文件操作

按文件中数据组织形式,可把文件分为文本文件和二进制两大类。文本文件:存储的是普通“字符”的文本,python默认的是unicode字符集,可以用记事本打开。

1.文本文件:存储的是普通“字符”的文本,python默认的是unicode字符集,可以用记事本打开。

2.二进制文件:二进制文件把数据内容用“字节”进行存储,无法用记事本,即使打开了,也是乱码,必须使用专用的软件解码。常见的mp3,mp4,jpg,doc文档等等。

3.操作方式有如下方式,

模式描述
r读read 模式
w写write 如果文件不存在则创建,若文件存在,把旧内容先抹掉,再写入
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()

文件操作思路:
1.创建文件对象
2.写入数据
3.关闭文件对象

5.中文乱码,windows系统默认的编码方式是GBK,Linux系统默认的编码是utf-8。造成乱码不一致的原因就是编码和解码不一致,比如你编码的是gbk,解码的时候是utf-8,这样就会造成乱码。

6.write和writelines的区别,write是写入字符串,writelines写入的是序列,比如列表,它会迭代帮你写入文件。  f.writelines([“哈哈1\n”, “哈哈2\n”])

7.正常的文件操作,一般都会带上异常。
try:
    f=open(r"d.txt","w")
    f.write("aaaaaa")
except BaseException as e:
    print(e)
finally:
    f.close()
8.with(关键字)用法,也叫上下文管理器。
list1=["aa","bb","cc"]
for i in range(0,len(list1)):
    with open(list1[i]+".txt","a") as f:
        f.writelines(list1)
9.文本文件的读取
read(size)
从文件中读取size个字符,并作为结果返回。size为空,则全部返回。字母和中文都算一个字符。

如果要读取每一行的话,代码如下
with open(r"bb.txt","r",encoding="utf-8") as f:
    for i in f:
        print(i,end="")
10.利用列表推导式处理文件
#从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)

11. read,readline,readlines的区别

read()  : 一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长

readline()  :每次读取一行内容。内存不够时使用,一般不太用,用得很少。

readlines()   :一次性读取整个文件内容,并按行返回到list,方便我们遍历,用的比较多。

12.二进制文件的复制
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")
13.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)
14.图片复制
#图片复制
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)
15.os操作
import os
os.startfile(r'D:\软件安装位置\Tencent\WeChat\WeChat.exe')
os.system(r’notepad.exe’)
16.输出当前工作目录下.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)
17.shutil模块
import shutil
shutil.copy('1.py','1_copy.py')
shutil.copytree('打算/111','666')
shutil.make_archive('打算/111','zip','666')
赞赏

微信赞赏支付宝赞赏

发表评论