#读取文件 # 常见文件的读写分类: # 1.普通文本文件:txt py md html 等 # 2.csv文件:.csv,需要借助于系统模块csv # 3.二进制文件:图片,音频,视频,压缩包等 # 4.对象的序列化和反序列化:pickle和json # 5.办公文件:需要借助于第三方模块 #1.打开文件open() #注意1,传递需要读取的文件的路径 #2,在路径前面加r将特殊字符转为正常路径 #例子:r"路径" #绝对路径:从系统盘开始到具体文件位置结束, # 只有在自己电脑上有用,在其他人电脑上用不了,一般用相对路径! #例子"C:\Users\86183\Desktop\js\js-2-书写位置.html" #在绝对路径中必须写\ #相对路径:在当前工程中和当前py文件相对的路径 #即当前文件和要读取的文件之间的关系 #情况一,两者平级 #如果要读取的文件和当前工程的文件在一个文件夹 #直接写(读取文件的名字即可)open("致橡树.py") #情况二, #如果当前工程的文件和要读取的上级目录平级,则要从上级目录开始书写 # open(r"致橡树.txt") #情况三, #虽然py文件和txt文件都在一个子目录中, # 只要两者是平级关系,则可以直接写文件名访问 # #成功了会有提示!!!!!! #例子:open("致橡树.py") #情况四,如果py文件的上级目录和txt文件平级,则需要回退路径 #..表示回退一级 #例子 # open(f"../致橡树3.txt") #如果要回退的级别多,中间要用斜杠隔开 #例子:f=open(r"../../致橡树99.txt") #如果py文件的上级目录和txt文件的上级目录平级 #先回退,然后访问txt的上级文件夹,然后txt #例子:txt在aaa文件里 # open(r"../aaa/致橡树.txt") #打开文件的模式 #2.读取内容read()/readline()/readlines() # 2.读取内容:read()/readline()/readlines() # 一次全部读取完毕,适用于数据量少的文件 # r1 = f1.read() # print(r1) # 一次只能读取一行 # r2 = f1.readline() # print(r2) # 一次性全部读完,同样适用于数据量少的情况的,但是返回列表, # 每一行内容是列表中的元素,使用较多 #3.关闭文件close() #文件名.close #例子:f1.close() # open(file,mode,encoding) # file:需要打开的文件名称或文件的路径 # 文件名称:需要打开的文件和当前py文件在同一个目录下,不常用 # 文件路径:需要打开的文件和当前py文件不在同一个目录下,可以使用相对路径或绝对路径 # 相对路径:相对当前工程的路径,如:aaa/file1.txt,推荐 # 绝对路径:从系统盘符开始的路径,如:c:/users/xxxx/Desktop/Coding5/Day21Code/aaa/file1.txt # mode:打开文件的模式 # 'r' open for reading (default),普通文件的读取 # 'w' open for writing, truncating the file first,普通文件的写入【删除原文件,生成一个空的新的文件】 # 'a' open for writing, appending to the end of the file if it exists,普通文件的写入【追加】 # 'rb' 打开二进制文件用于读取 # 'wb' 打开二进制文件用于写入 # encoding:文件的编码格式 # 常用的编码格式:utf-8/gbk #例子:#先读取普通文件(致橡树) # f = None # try: # f=open(r"D:\新建文件夹\pythonProject1\致橡树(1).txt","r",encoding="gbk") # print(f.read()) # except Exception as e: # print("错误",e) # finally:f.close() # k=open(r"../致橡树(999).txt","r",encoding="gbk") # print(k.read()) # k.close() # k=open(r"aaaa\day20_xieru.txt","w",encoding="utf-8") # k.write("hello world 文件") # k.close()#将目标文件清空,然后写入要写的东西 # # s=open(r"aaaa\day20_xieru.txt","a",encoding="utf-8") # s.write("2.写入强强的那欧锦打低级玩家等级建瓯大家奥委会的钱钱钱钱")#在目标文件后面写入我要写的东西 # s.close() # 1.打开文件 # """ # 注意: # a.写入文件内容【w或a】的时候,文件路径可以不存在,自动生成 # b.不管是读取还是写入,encoding的值和源文件的编码格式保持一致 # c. # 'w':open for writing, truncating删除 the file first,达到了覆盖的效果 # 'a':open for writing, appending to the end of the file if it exit, # 达到追加内容的效果 # """ # # f2 = open(r'aaa/file1.txt','w',encoding='utf-8') # 文件路径存在 # # f2 = open(r'aaa/file2.txt','w',encoding='utf-8') # 文件路径不存在,自动创建 # f2 = open(r'aaa/file1.txt','a',encoding='utf-8') # # # 2.写入内容 # f2.write('Python计算机23532662') # # 如果需要写入的数据量较大,则可以借助于刷新提高写入效率 # f2.flush()#刷新 # # # 3.关闭文件 # f2.close() #with[简化代码] #语法: # with 对象 as 变量: # pass # 在文件读写中: # with open() as f: # 读/写 # #read/write() # a.with上下文管理器一般用于简化代码,如:文件读写,数据库操作等 # b.使用with上下文管理器进行文件的读写之后,无需手动关闭文件,当with代码块执行完毕, # 对应的文件会自动关闭 # c.变量表示文件描述符,也就是打开的文件对象 # d.当通过with的方式打开文件,则文件读取和写入的操作一定要在with代码块中完成, # 否则文件会被关闭导致无法操作[ValueError: I/O operation on closed file.] #例子1: # with open('致橡树(1).txt',"a",encoding="gbk") as f3: # f3.write("中") # f3.write("运行一次就会写入一次") # #例子2: # # 例子一已经写入成功 # with open('致橡树(1).txt',"r",encoding="gbk") as f2: # f2.flush() # r1=f2.read() # print(r1)#with要注意缩进,在with结束的时候文件会自动关闭 # 二进制文件:图片,音视频,压缩包等 # b:bin,binary # 注意: # a.读取和写入二进制文件需要使用rb和wb # 'rb' 打开二进制文件用于读取 # 'wb' 打开二进制文件用于写入 # b.因为二进制文件是由二进制【字节】组成,没有编码一说, # 所以需要省略encoding参数,如果设置encoding, # 报错ValueError: binary mode doesn't take an encoding argument #格式和读取正常文件类似,但是没有编码 #音频,视频,图片,压缩包等 #例子: # with open("aaaa/01.jpg","rb")as a1: # #aaaa/01.jpg是要读取的文件位置 # mmm=a1.read()#mmm是变量名也可以叫其他名字 # print(mmm)#读取的是aaaa.01.jpg # #例子:写入二进制文件 # with open("包/01.jpg","wb")as a23: # #写入时创建一个新的文件(文件名是"01.jpg")写入的地址是bbbb # #可以理解为在bbbb中新建一个为"01.jpg"的文件 # #"01.jpg"只是一个名字,可以换成其他名字 # #如果已经有了同名的文件将不再覆盖 # a23.write(mmm) # a23.flush() #读取csv文件 #1,csv文件读写较为特殊要借助系统模块csv # import csv # #读取csv文件 # with open("包/t2.csv",'w',encoding="utf-8",newline="") as f1 : # #注意,写入csv文件时,使用csv.writer() # #结合writerow()/writers() # #一次写入一行/一次写入多行 # a=csv.writer(f1) # dast=[["花舞",12,"女","2班"], # ["花六",10,"女","5班"],["花歌",40,"女","12班"] ] # for tt in dast: # a.writerow(tt)#单行写入 # a.writerows(dast)#多行写入 # #给a逐行写入dast # #写入后检查文件,有时会出现空行 # #如果出现空行 # # class Person(): # def __init__(self,name,age): # self.name = name # self.age = age # def show(self): # print(f"姓名:{self.name},年龄:{self.age}") # per = Person('张三',10) # import pickle # # 1.序列化【写入】 # # 注意:需要pickle序列化对象,则文件的打开方式一定要使用wb或rb,类似二进制文件的读写 # with open(r"包/a1.txt",'wb') as f: # pickle.dump(per,f) # pickle.dump(对象,文件对象) # #per = Person('张三',10) # # 2.反序列化【读取】 # with open(r"包/a1.txt",'rb') as f: # r = pickle.load(f) # pickle.load(文件对象) # print(r) # print(r.name,r.age) # r.show() import json data={"name1":"张三","name2":"李四"} # 1.序列化 # json.dump():将Python中的字典或列表对象序列化到指定的文件中 # json.dumps():将Python中的字典或列表对象序列化为json字符串 # 注意:ensure_ascii的默认值为True,表示对中文进行编码 # 如果中文不需要编码,则可以设置ensure_ascii=False r1 = json.dumps(data,ensure_ascii=False) #默认ensure_ascii=True with open(r"包/country.json",'w',encoding='utf-8') as f: json.dump(data,f,ensure_ascii=False) #将date序列化到f里去,f为包/country.json # # 2.反序列化 # # json.load():将指定的文件中的json字符串反序列化为Python中的字典或列表对象 with open(r"包/country.json",'r',encoding='utf-8') as f: r3 = json.load(f) print(r3) # # json.loads():将json字符串反序列化为Python中的字典或列表对象 r2 = json.loads(r1) print(r2)
好难的作业
最新推荐文章于 2024-09-11 21:31:46 发布