day17 文件管理操作

1.数据本地化和数据持久化 - 通过文件将数据储存到硬盘中

数据库文件:txt、json、plist、xml、png文件、mp4、mp3等

2.文件操作 - 文件内容操作

基本步骤:打开文件 --> 操作文件(读/写) --> 关闭文件

1) 打开文件

open(file, mode,encoding = None)  -  已指定的方式打开指定文件,并且返回被打开的文件对象

file -- 字符串:需要打开的文件路径
        ./  --  当前文件所在目录
        ../  --  当前文件所在目录的上层目录
        
mode  -- 字符串: 打开方式
            r -- 默认值,以读的方式打开文件(不能修改内容),读出来的内容是文本
            w -- 以写的方式打开文件,覆盖源文件
            a -- 以写的方式打开文件,追加源文件
            rb/br -- 以读的方式打开,读出来的内容是二进制
            wb/bw -- 以写的方式打开,将二进制数据写入文件中
            +   --  以读写的方式打开文件(了解)

encoding   --  文本编码方式
               utf-8
               注意:文本编码只针对文本文件、二进制文件不能设置编码方式

2.文件操作

文件对象.read()  --   获取文件中的内容,并返回
                                     (读写位置默认在文件开头)
文件对象.seek(字节数) --   将读写位置移动到指定的地方(了解)
def main():
    # 1.文件读操作
    f = open('test.txt','r',encoding= 'utf-8')
    print(f)
    result = f.read()
    print(result)



    # 2.文件写操作
    """
    文件对象.write(内容)  --  将指定内容写到文件里,并覆盖源文件内容
    """
    f = open('test.txt','w',encoding= 'utf-8')
    wrt = f.write('李白想婆娘')
    print(wrt)

    # 关闭文件
    """
    文件对象.close()
    """
    f.close()

    # ======
    """
    注意:打开文件的时候,如果以读的方式打开一个不存在的文件,会出现异常报错
          如果以写的方式打开一个不存在的文件,不会出现异常并且会创建一个新的对应的文件并打开操作
    """

if __name__ == '__main__':
    main()

二进制文件操作

rb  -   读的时候获取到的是二进制数据(bytes)
wb   -  写的时候写入的内容要求类型是二进制文件

普通的文本文件可以通过二进制的形式去打开,影响只是获取到的内容,和写的内容的数据类型;
二进制文件只能以二进制的形式打开(例如:图片,音频)

二进制数据

一般二进制数据都是通过网络请求获取到,或者通过读取本地的二进制文件获取

1)将字符串转换二进制
bytes(str,encoding = 'utf-8')   

字符串.encode(编码方式) -  str.encode(encoding = 'utf-8')


2) 将二进制转换成字符串
str(二进制数据,encoding = 'utf-8')

二进制数据.decode(编码方式)

文件上下文

with open(文件路径,打开方式,编码方式) as 文件对象:
操作文件

文件操作完成后,会自动关闭

def main():
    with open('./files/test.txt', 'r', encoding='utf-8') as f1:
        print(f1.read())

    # 1. 普通文本文件以二进制的形式打开
    f = open('./files/test.txt', 'rb')
    reslut = f.read()
    print(reslut, type(reslut))

    f = open('./files/test.txt', 'wb')
    f.write(bytes('bbb', encoding='utf-8'))

    # 2. 二进制文件
    f1 = open('./files/luffy4.jpg', 'rb')
    reslut = f1.read()
    print(reslut, type(reslut))

    f2 = open('./files/aaa.jpg', 'wb')
    f2.write(reslut)



if __name__ == '__main__':
    main()

1.json数据

满足json格式的数据就叫json数据

json格式: 一个json有且只有一个数据,这个数据必须是json支持的数据类型

json支持的数据类型:
1、数字(number) -  包含所有的数字(整数和小数),并且支持科学计数法。
2、字符串(string)  -  通过双引号包含的字符集 :"abcd","1234","你好"   字符也可以是转义字符
3、布尔(boolean)  -  true/false
4、数组(array)  -   相当于python中的列表,[100,"abc",true,[1,2,3]]
5、字典(dictionary)  -  相当于python中的字典,{"a":10,"b":100,"c":true}
6、空值     -   null,  相当于 None

2.使用json

1) 解析json数据(获取到json数据后将json中想要的东西解析出来) -- 做前端开发人的工作

2) 构造json数据

# =====================1.json转python(json数据解析)============
在python中有一个内置库,专门负责json数据的处理: json库
a. 将json数据转换成python数据
json数据              python数据
number                 int/float
string                 str,可能会出现将双引号变成单引号
bool                   bool,true -> True   false ->  False
array                  list
dictionary             dict
空                     null -> None

json.loads(字符串,encoding = 'utf-8') - 解析json数据
字符串要求: 字符串中内容本身就是一个json数据(去掉引号后,本身就是一个json数据)

result = json.loads('"abc"',encoding='utf-8')
print(result,type(result))    # abc 

result = json.loads('100',encoding='utf-8')
print(result,type(result))    # 100 

result = json.loads('true',encoding='utf-8')
print(result,type(result))    # True 

result = json.loads('[10,23,"nsq",true]',encoding='utf-8')
print(result,type(result))    # [10, 23, 'nsq', True] 

result = json.loads('{"a": 100,"b": false}',encoding='utf-8')
print(result,type(result))    # {'a': 100, 'b': False} 

with open('jsontest.json','r',encoding='utf-8')as f:
    result = f.read()
    result_py = json.loads(result,encoding='utf-8')
    result1 = result_py['data']
    max_dict = max(result1, key=lambda x: int(x['favourite']))
    print(max_dict['name'],max_dict['text'],max_dict['favourite'])

# ======================2.将python 转换为json 数据======================

"""
python数据          json数据
int/float            number
bool                 True => true , False => false
str                  string  '' => ""
list,tuple           array
dict                 dictionary
空值                 None => null


json.dumps(python数据)   ==》 将python数据转换为对应的json数据 其结果是字符串类型
"""
result = json.dumps('abc')
print(result,type(result))
# ===================3.json 文件操作=====================
"""
json.load(文件对象)   -   将文件对象中的文件内容转换为python数据
                          要求文件内容是json数据

json.dump(python数据,文件对象) -  将python数据转换成json数据,结果(字符串)再写入指定文件中

"""
with open('test.txt','r',encoding='utf-8')as f:
    result = json.load(f)
    print(type(result),result)

你可能感兴趣的:(day17 文件管理操作)