自学python所记(十二)

十六、文件

16.1、文件介绍

计算机的文件 就是存储在某种长期储存设备上的一段数据

作用:将数据长期保存下来,在需要的时候使用

1.计算机只认识 二进制(0 1)

2.文件中存储的数据都是以二进制(0 1)的形式去存储

可以根据 文件中的二进制内容,能否使用记事本软件 将其转换为文字,
将文件分为两种:文本文件和二进制文件

  • 文本文件

    • 能够使用记事本软件打开(能够使用记事本转换为文字)

    • txt  md  py  html  css  js  json
      
  • 二进制文件

    • 不能使用记事本软件打开的

    • exe   mp3  mp4  jpg   png  
      

16.2、文件操作

文件操作步骤:

1.打开文件
2.读或写文件
3.关闭文件

1.打开文件

打开文件:将文件从磁盘(硬盘),读取到内存中
语法:
open(file,mode = 'r',encoding = None):   # known special case of open 
	参数 file: 是要打开的文件,类型是字符串,文件的路径 可以是先对路径,
也可以是绝对路径,建议使用相对路径(./  ../)
	参数 mode:默认参数(缺省参数),标志的是打开文件的方式
   		> r:read 只读 打开
		> w:write 只写 打开
		> a append 追加打开方式,在文件的末尾写入内容
	参数 encoding:编码方式(文字和二进制如何而进行转换)
		>gbk :将一个饿汉子转换为3个字节的二进制
		> utf-8 :常用将一个汉字转换为3个字节的二进制
	返回值 : 返回的是 文件对象,后续对文件的操作,都需要这个对象

2.读或写文件

写文件

向文件当中写入指定内容
前提:文件打开方式是w或者a
文件对象.write('写入文件内容')
# 返回值 :写入文件的字符数,一般不关注
# 注意w方式打开文件:
  1.文件不存在,会直接创建文件
  2.文件存在,会直接覆盖原文件
# 1 打开文件
f = open('a.txt','w',encoding = 'utf-8')

# 2 写文件
f.write('好好学习')

# 3 关闭文件
f.close()

读文件

将文件中的内容读取出来
前提:文件的的撒开方式需要是r

文件对象.read(n)
# 参数n表示读取多少个字符,一般不写,表示读取全部内容
# 返回值: 读取到的文件内容,类型 字符串
# 打开文件、
f = open ('a.txt','r',encoding = 'utf-8')
# 读文件
buf = f.read()
print(buf)

# 关闭文件
f.close()

# r 方式打开文件,如果文件不存在,代码会报错

3.关闭文件

关闭文件:将文件占用的资源进行清理,同时会保存文件,文件关闭之后,这个文件对象就不能使用了
文件对象.close()

16.3、使用with open 打开文件

with open() 打开文件的好处:不用自己书写关闭文件的代码,会自动进行关闭
with open(file,mode,encoding='utf-8') as 变量:
	# 在缩进中读取或者写入文件
# 缩进中的代码执行结束,出缩进之后,文件会自动关闭
注意 a 方式打开文件:
	文件不存在会创建文件
	文件存在,在文件末尾写入内容
with open ('a.txt','a',encoding = 'utf-8') as f:
    f.write('good good study')

16.4、按行读取文件内容

按行读取文件:一次读取一行内容

文件对象.redline()
# with open('b.txt',encoding = 'utf-8') as f:
#     buf = f.readline()
#     print(buf)  # 111
#     print(buf)  # 111
#     print(f.readline())   # 222
#     print(f.readline())   # 222


with open('b.txt',encoding = 'utf-8') as f:
    for i in f:   # 按行读取,读到文本末尾结束
        print(i, end = '')


# read()和 readline() 读到文件末尾,返回一个空字符串,长度为0


with open ('b.txt',encoding = 'utf-8') as f:
    while True:
        buf = f.readline()
        if len(buf) == 0:
            break
        else:
            print(buf,end='')
            



with open ('b.txt',encoding = 'utf-8') as f:
    while True:
        buf= f.readline()
        if buf:     # if  len(buf) != 0   #在容器中,容器为空,即容器中的数据的个数为0,表示False, 其余情况都是True
            print(buf)
        else:
            break

十七、json文件处理

json文件 也是一个文本文件 就可以直接使用 read() 和 write() 方法去操作文件,只是使用这俩个方法不方便,所以对json文件有自己独特的读取和写入方法

常用在 在测试时候  将测试数据定义为json文件格式,使用 代码读取json 文件,即读取测试数据,进行传参(参数化)

17.1、json介绍

基于文本,独立于语言的轻量级的数据交换格式

-基于文本 是一个纯文本文件,

-独立于语言,不是某个语言特有的

-轻量级,相同的数据,和其他格式相比,占用较小

-数据交换格式  后端程序员 给前端的数据(json html xml)

17.2、json文件的语法

1. json 文件的后缀是 .json

2. json 中主要数据类型为 对象({}类似python 中 字典)和数组([] 类似python中的列表),
   对象 和数组可以相互嵌套
3. 一个json文件是一个 对象或者数组(即json 文件的最外层要么是一个{},要么是一个数组)

4.json中的对象是由键值对组成的,每个数据之间使用 逗号隔开,但是最后一个数据后边不要写逗号

5.json中的字符串 必须使用 双引号

6.json中的其他数据类型
--数字类型  ----》  int float
--字符串string  ----》 str
--布尔类型 true,false    ----》True,False
--空 null    ----》None

17.3、json 文件的书写

我叫小明,今年18 岁 ,性别男,爱好 听歌,游戏,购物,吃饭,睡觉,我的居住地址为国家,城市 上海

新建->file->文件名.json

{
  "name" : "小明",
  "age" :  18,
  "isMen" : true,
  "like" : ["听歌","游戏","购物","吃饭"],
  "address": {
    "country" : "中国",
    "city" : "上海"
  }
}

17.4、json文件的读取

1.导包 import json

2.读r方式 打开文件

3.读文件
json.load(文件对象)

# 返回的是 字典(文件中是对象)或者列表(文件中是数组)
# info.json文件
{
  "name" : "小明",
  "age" :  18,
  "isMen" : true,
  "like" : ["听歌","游戏","购物","吃饭"],
  "address": {
    "country" : "中国",
    "city" : "上海"
  }
}
# 导入json
import json

# 读打开文件
with open("info.json",encoding = 'utf-8') as f:
    # 读取文件
    
    # 方法一:
    # buf = f.read()
    # print(type(buf),buf)
    
	# 方法二:
    result = json.load(f)
    print(type(result))   # <class 'dict'>
    #  获取姓名
    print(result.get('name'))
    # 获取年龄
    print(result.get('age'))
    # 获取城市
    print(result.get('address').get('city'))

练习info

info2.json 文件

[
  {
    "name": "小明",
    "age": 18,
    "isMen": true,
    "like": [
      "听歌",
      "游戏",
      "购物",
      "吃饭"
    ],
    "address": {
      "country": "中国",
      "city": "上海"
    }
  },
  {
    "name": "小红",
    "age": 17,
    "isMen": false,
    "like": [
      "听歌",
      "学习",
      "购物",
      "吃饭"
    ],
    "address": {
      "country": "中国",
      "city": "北京"
    }
  }
]

读取代码

import json

with open('info2.json', encoding='utf-8') as f:
    info_list = json.load(f)
    for info in info_list:
        print(info.get('name'), info.get('age'), info.get('address').get('city'))

17.5、json的写入

文件对象.write(字符串)   不能直接将python的 列表 字典 作为参数的传递

想要将python中的数据类型存为json文件,需使用json提供的方法,不在使用  write

步骤:
1.导包 import json
2.写(w)方式打开文件
3.写入
	json.dump(python中的数据类型,文件对象)
import json

my_list = [('admin', '123456', '登录成功'), ('root', '123456', '登录失败'), ('admin', '123457', '登录失败')]

with open('info4.json', 'w', encoding='utf-8') as f:
    # json.dump(my_list, f)
    # info4.json 得到[["admin", "123456", "\u767b\u5f55\u6210\u529f"], ["root", "123456",
    # "\u767b\u5f55\u5931\u8d25"], ["admin", "123457", "\u767b\u5f55\u5931\u8d25"]]

    # json.dump(my_list, f, ensure_ascii=False)  # 直接显示中文,不以ASCII的方式显示
    # info4.json输出:[["admin", "123456", "登录成功"],
    # ["root", "123456", "登录失败"], ["admin", "123457", "登录失败"]]

    json.dump(my_list, f, ensure_ascii=False, indent=2)  # 显示缩进2格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值