好难的作业

#读取文件
# 常见文件的读写分类:
# 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值