day12-文件操作和异常捕获

"""author = 陈俊龙"""

===============文件操作===============

1.数据本地化:

计算机内存分为硬盘和运行内存,当运行程序的时候,系统会自动在运行内存开辟空间保存程序运行过程中产生的数据,但是当程序结束的时候,这个内存空间会自动销毁,数据也会跟着销毁

如果希望数据一直存在,需要将数据存在硬盘中。

存储到本地文件的数据,就是存储在硬盘中的数据,就能持久化。

编程中常见的文件类型有:
txt文件,二进制文件(图片,视频,音频,压缩),json文件,plist文件,数据库文件(.db,.sqlite)

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

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

语法:

open(file,mode ='r',encoding=None) - 打开指定文件,返回文件对象

说明:

file :

-- 需要打开文件的路径,可以是绝对路径,也可以是相对路径
绝对路径:文件在电脑中的全路径(一般很少使用)
相对路径:./ (代表当前目录) ../ (代表当前目录的上层目录)

mode:

-- 字符串,文件打开方式 ,打开方式决定了打开文件后支持的操作和操作的数据的类型
'r':默认值,只读,读出来的数据是字符串(文本文件的读)
'w':只写,打开文件只支持写操作,只能将字符串写入文件 (文本文件的写)!会覆盖原文件内容!
'rb'/'br' :只读,读出来的数据是二进制数据
'wb'/'bw':只写,只能将二进制数据写入文件 !会覆盖原文件内容!
'a':只写,只能将字符串写入文件!保留原文件类容!
'ab'/'ba':

encoding:

-- 设置文件内容的编码方式,固定写'utf8',!只争对文本文件有效!

注意:

只有文本操作才能设置编码方式
文本文件在读和写,编码和解码方式必须一致

2.操作文件:

a.读操作 - 获取文件中的内容

文件对象.read() - 会返回文件中的内容
文件对象.readline() - 从读写位置到一行结尾

b.写操作 - 将指定内容写入文件中

文件对象.write()

3.关闭文件:

文件对象.close()

3.移动光标位置:

1.打开文件

txt = open('./files/file.txt', mode='r', encoding='utf8')

2.获取文件中的内容:

获取文件中所以的内容!注意光标位置,读完之后光标也到达最后位置,再读就读不了了!

print(txt.read())

3.移动读写位置(移动光标)

文件对象.seek()

txt.seek(0)  # 将光标移动到开始位置(这样才可以又读了)
print('=====', txt.readline())
print('=====', txt.readline())  # !再读会读第二行!

4.关闭文件

txt.close()

练习:

一行一行的读一个文件:

txt = open('./files/file.txt', 'r', encoding='utf8')
while True:
    content = txt.readline()
    if not content:
        break
txt.close()

追加写操作:

txt = open('./files/file.txt', 'a', encoding='utf8')
txt.write('abc')
txt.close()

==============二进制文件=============

1.常见的二进制文件有哪些:

图片文件,视频文件,音频文件,压缩文件

注意:

不是只要二进制文件才支持'b'操作(rb,wb,ab),但是二进制文件只能采取'b'操作

所以带'b'的操作都不能设置encoding=

txt = open('./files/file.txt', 'rb')
print(txt.read())
txt.close()
# 读图片
txt = open('./files/1BDRXMTN3T8B6QK3.jpg', 'rb')
tu = txt.read()
txt.close()

写图片

jpg = open('./files/new.jpg', 'wb')
jpg.write(tu)
jpg.close()

2. 文件不存在的情况:

如果以一个读的方式打开一个不存在的文件,程序会报错

如果以写的方式打开一个不存在的文件,程序不会报错,而是会创建一个新文件

3.打开文件的简写:

语法:

with open(文件路径,读写方式,编码方式) as 文件对象:
文件域

说明:

以这种方式打开文件,在文件域结束后,文件会自动关闭

文件对象:

可以理解为之前的变量名

with open('./files/file.txt', 'r', encoding='utf8') as txt:
    txt = txt.read()
    print(txt)

===============json数据===============

import json

1.什么是json数据:满足json格式的数据

1)json格式:

1.一个json只能有且只有一个数据
2.这个数据必须是json支持的数据类型对应的数据

2)json支持的数据类型:

a.数字类型 -- 所以的数字对应的类型(整数,小数,负数....)并支持科学计数法

b.字符串 -- 只能使用用!双引号!引起来的字符串,支持转义字符和编码字符

c.布尔值 -- 只有true和false两个值,注意开头是!小写!

d.数组 -- 相当于python中的列表,用中括号括起来[]数组中的元素也只能是json支持的数据类型

e.字典 -- 相当于python中的字典,但是key只能是用双引号引起来的字符串

f.null -- 相当于python的None,表示空

2.将json数据转python:

1)转换关系:

json --> python
数字类型 --> in或者float
字符串 --> 字符串,双引号可能会变单引号
布尔值 --> bool,首字母会大写
数组 --> list,列表
字典 --> dict,字典
null --> None

2)转换方法:

loads(字符串)方法:将json格式的字符串转换成对应的python数据,

注意:

字符串的内容(去掉引号后的内容)必须是json格式的数据

result = json.loads('123')
print(type(result))  # <class 'int'>

result = json.loads('"abc"')  # !注意这里的引号关系!
print(type(result))  # <class 'str'>

result = json.loads('{"abc":123,"bcd":[1,2,3,true]}')
print(result)  # {'abc': 123, 'bcd': [1, 2, 3, True]}


# with open('./files/data.json', 'r', encoding='utf8') as json1:
#     contend = json1.read()
#     py = json.loads(contend)
#     print(py["abc"])

3.将python转json:

"""

1)转换关系:

python --> json
int/float --> 数字
str --> 字符串,单引号变双引号
bool --> 布尔,首字母变成小写
list/tuple --> 数组
dict --> 字典
None --> null

2)方法:

dumps(数据) -- 将数据转换成json格式的!字符串!

实例:

result = json.dumps(100)
print(type(result), result)  # <class 'str'> 100

result = json.dumps('abc')
print(type(result), result)  # <class 'str'> "abc"

result = json.dumps([10, True, 'abc', [None]])
print(type(result), result)  # <class 'str'> [10, true, "abc", [null]]

result = json.dumps({10: [10, True, '小明', [None]]})
print(type(result), result)  # <class 'str'> {"10": [10, true, "\u5c0f\u660e", [null]]}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容