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')
posted @ 2021-01-16 15:30  爱时尚疯了的朱  阅读(388)  评论(0编辑  收藏  举报