python文件操作,,python文件操作


python文件操作

目录:

1.文件读写  #文件两种类型(文本、二进制)

  读写文本文件:read 全部读出,read(n) 一次读n w:写 r:读

  读写二进制文件(案例:读取图片、视频拷贝(边读边写)):rb 读 、wb 写、ab 追加

2.文件与目录的操作(os、shutil模块)

  查看当前目录:os.getcwd()

  切换目录:os.chdir()

  显示当前目录下的内容:os.listdir()

  判断是目录还是文件:目录:os.path.isdir 文件:os.path.isfile

  新建目录:新建多级目录:os.makedirs 新建单个目录:os.mkdir

  删除目录:os.rmdir #只能删除空目录 shutil.rmtree:删除目录(包括非空目录)

  移动文件:shutil.move

  复制文件:shutil.copy #只复制文件内容 shutil.copy2 #复制文件所有,包括修改的时间等

3.文件序列化(pickle、shelve、json模块) 

  

1.文件读写

  1.1读写文本文件

#文本文件读写#文件写w:import oswith open("1.txt","w") as f:    #文件名可写相对路径,也可写绝对路径;在当前文件下创建了1.txt    f.write("胜多负少")    f.write("12365")        ##python写文件时默认按自身的操作系统编码,中文———GBK  英文————utf-8    f.write("fsfsdf")with open("2.txt","w",encoding="utf-8") as f:   #编码:以ANSI格式编码(默认)    f.write("胜多负少\n")    f.write("12365\n")    f.write("fsfsdf\n")#文件读r:with open("2.txt","r",encoding="utf-8") as f:    txt=f.read(2)   #一次读2个字符,默认全读    print(txt)    t2=f.read() #会接着上面读过的位置开始往下读    print(t2)with open("2.txt","r",encoding="utf-8") as f:    t3=f.readlines()    #readlines()按行读取,读取完以列表的形式显示    print(t3)with open("2.txt","r",encoding="utf-8") as f:    t4=f.readline()    #readline()按行读取,一次读取一行    print(t4)#文件追加a:with open("2.txt","a",encoding="utf-8") as f:    f.write("胜多负少\n")    f.write("12365\n")    f.write("fsfsdf\n")with open("2.txt",encoding="utf-8") as f:    while True:     #循环遍历出文件内容,一次读取一行        txt=f.readline()        if txt:    #读取的文件不为空继续打印,当读取的内容为空时(即为假),跳出循环            print(txt)        else:            break

  1.2读写二进制文件

#二进制文件操作print("1.读写二进制文件")  """with open("1.jpg",‘rb‘) as f:   #读取图片    t=f.read(3) #分析图片的二进制格式(用二进制工具打开),可以看到,jpg图片的标识头为:ffd8ff    if t==b‘\xff\xd8\xff‘:        print("这是一个图片")    print(t,type(t))with open("1.jpg",‘rb‘) as f:    t=f.read()with open("2.jpg","wb") as f:    f.write(t)"""#视频拷贝(边读边写)with open("1.mp4","rb") as f:    with open("2.mp4","ab") as f2:        while True:            txt=f.read(1024)            if txt:                f2.write(txt)            else:                print("文件拷贝完毕!")                break    

2.文件与目录的操作(os、shutil模块)

#python 文件与目录操作import os,shutilprint("查看当前目录:")print(os.getcwd())print("切换目录:")os.chdir("F:\\pythonstudy")print(os.getcwd())print("显示当前目录下的内容:")print(os.listdir())     #显示当面目录下的所有文件,以列表的形式显示print(os.listdir("F:\\pythonstudy\\lesson7"))   #显示指定目录下的内容print("判断是目录还是文件:") #返回True或者Falseprint(os.path.isdir("lesson7"))print(os.path.isfile("lesson7\\1.txt"))print(os.path.isdir("lesson7\\1.txt"))#新建目录mkdir/makedirs:print("创建目录mkdir/makedirs:")#os.mkdir("999")    #mkdir创建单个目录#os.makedirs("888/666/22")    #makedirs创建多级目录#删除目录#os.rmdir("999") #rmdir只能删除空目录#shutil.rmtree("888")   #rmtree可以删除非空目录#删除文件#os.remove("ss.txt")#移动文件#shutil.move("dd.txt","F:\\pythonstudy\\lesson7")#shutil.move("1.jpg","2.jpg")  #改名#复制文件print(os.chdir("F:\\pythonstudy\\lesson7"))shutil.copy("dd.txt","ff.txt")shutil.copy2("dd.txt","mm.txt")#组合路径path="F:\\pythonstudy\\lesson7"f="1.jpg"print(os.path.join(path,f))#拆分路径#以文件目录拆分(默认以最后一个"\\"分隔)print(os.path.split("F:\\pythonstudy\\lesson7\\1.jpg"))#以盘符进行拆分print(os.path.splitdrive("F:\\pythonstudy\\lesson7\\1.jpg"))

3.文件序列化(pickle,shelve,json模块)

pickle: 

  只能用二进制读写,python下所有的类型都可存 缺点:只支持同版本,不能跨平台

  pickle可以把对象以文件的形式存放在磁盘,

  pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化。

  pickle序列化后的数据,可读性差,人一般无法识别

  pickle.dump(obj, file[, protocol]),序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。    protocol的值还可以是1或2,表示以二进制的形式序列化。

  pickle.load(file),反序列化对象。将文件中的数据解析为一个Python对象

import random import pickle"""#使用pickle模块将数据对象保存到文件import  pickledata1={‘a‘:[1,2.0,3,4],        ‘b‘:(‘string‘,u‘sdfsf‘),        ‘c‘:None} with open("data.pkl",‘wb‘) as f:    pickle.dump(data1,f)#获取保存文件的内容with open("data.pkl",‘rb‘) as f:    b=pickle.load(f)    print(b)""""""    print("1.pickle模块")try:    with open("cjb","rb") as f:        cjb=pickle.load(f)        print("结果已加载")except FileNotFoundError:    cjb=[]for i in range(5):    name=input("name:")    cj=random.randint(50,100)    cjb.append([name,cj])print(cjb)with open("cjb","wb") as f:    pickle.dump(cjb,f)    print("结果已保存")"""

shelve:

  在shelve模块中,key必须为字符串

  pickle和json可以dump多次但只能load一次(因为先前的数据已经被后面dump的数据覆盖掉了),如果想要实现dump多次不被覆盖,就可以想到使用shelve模块

import shelveimport datetime"""#数据存储(数据持久化)info = {‘name‘: ‘bigberg‘, ‘age‘: 22}name = [‘Apoll‘, ‘Zous‘, ‘Luna‘]t=datetime.datetime.now()with shelve.open(‘shelve.txt‘) as f:    f[‘name‘]=name  #持久化列表    f[‘info‘]=info   #持久化字典    f[‘time‘]=t     #持久化时间类型"""#数据读取(get获取数据)with shelve.open("shelve.txt") as f:    n=f.get(‘name‘)    i=f.get(‘info‘)    now=f.get(‘time‘)print(n)print(i)print(now)"""

json:

  将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据

  JSON的数据格式其实就是python里面的字典格式

  json.dumps()把一个Python对象编码转换成Json字符串

  json.loads()把Json格式字符串解码,转换成Python对象

  元组(被转换成列表),集合不能被json序列化,所有key必须都是字符串(强行转,易失真);

  转出来都是字符串;常用来处理字典

  json处理整数、小数、字符

  技术分享图片

  json处理元组,元组被转换为列表

  技术分享图片

  json不能处理集合

  技术分享图片

  json处理字典,字典的key会被转换为字符串

  技术分享图片

  json.dump,json.load的用法

import jsonstr1="安抚家属的快感的降幅高达"str2="123"str3=1.23str4=[1,2,3]str5=(3,6,8)str6={"x":1,"y":2}str7={1:"a",2:"b"}"""with open("123.txt","w") as f:    json.dump(str1,f)   #汉字存储是以unicode编码存储  with open("123.txt") as f:    print(json.load(f))"""  """with open("123.txt","w") as f:    json.dump(str2,f)   with open("123.txt") as f:    print(json.load(f))"""with open("123.txt","w") as f:    json.dump(str3,f)   with open("123.txt") as f:    print(json.load(f))"""  

"""
with open("123.txt","w") as f:
json.dump(str5,f) #元组被序列化会被转成列表,然后存储

with open("123.txt") as f:
print(json.load(f)) #元组反序列化的结果是列表
"""

  

python文件操作

评论关闭