"""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]]}