文件内容的操作,主要是文件读操作和写操作
第一步:打开文件
第二步:读文件 – 获取文件内容/写文件 – 将内容写入文件中
第三步:关闭文件
(1)打开文件
open(file,mode=“r”,…,encoding=None) – 以指定的方式打开指定文件并且返回一个文件对象
a.file – 字符串,需要打开的文件的路径
b.mode – 文件打开方式(决定打开文件后能够支持的操作是读还是写;
决定打开文件后操作数据的数据类型是文本数据还是二进制数据)
控制读写的mode值
“r” – (默认)只读,被打开的文件不存在会报错
“w” – 只写,打开的时候会先删除原文件内容,被打开的文件不存在会自动创建
“a” – 只写,打开的时候不会删除原文件内容,被打开的文件不存在会自动创建
“x” – 只写,新建文件(打开已经存在的文件会报错,打开不存在的文件会自动创建)
控制数据类型的mode值
“t” – 文件的数据是文本数据(字符串类型,默认值,只有文本文件操作的时候才能使用)
“b” – 文件的数据是二进制数据(bytes类型,适用于任何文件,不能设置encoding的值)
注意:mode值的两种控制方式要一起用
c.encoding – 文本文件的编码方式,一般设置为"utf-8"
(2)读写文件
文件对象.read()
a.文件对象.read() – 从文件读写位置开始,读到文件结束(以读的形式打开文件文件读写位置在文件开头)
文件对象.seek(偏移量) – 将读写位置移动到离文件开头指定距离所在的位置
(一般设置为0,让读写位置回到文件开头)
b.文件对象.readline() – 读一行(从读写位置开始到一行结束)
文件对象.write(内容)
a.文件对象.write(内容)
(3)关闭文件
文件对象.close() – 关闭指定文件
f = open("files/poem.txt", encoding="utf-8")
while True:
line = f.readline()
print(line[:-1])
if not line:
break
f.close()
# 1.文件域 -- 文件对象的作用范围
"""
通过with open 打开文件,能够让被打开的文件对象自带作用范围,不需要手动关闭文件
with open(file,mode="r",....,encoding=None) as 文件对象:
文件的作用域
"""
"""
程序中的数据默认都是保存在运行内容中的,当程序运行结束后全部都会销毁
数据持久化是将数据保存在文件中(文件是保存在硬盘中,硬盘里面的数据除非手动操作
或者硬盘损坏或者格式化,否则是不会销毁的)
"""
"""
如果希望这次运行程序产生的数据,在下一次运行程序的时候还能用,
那么这个时候就需要对这个数据进行持久化
"""
"""
满足以下三点数据就能持久化:
a.用一个文件来保存对应的数据
b.程序中需要这个数据的时候从文件中读出这个数据而不是在程序中直接给值
c.数据发生了改变,要将最新的数据更新到文件中
"""
# 写程序打印当前程序运行的次数
with open("files/num.txt", encoding="utf-8") as f:
num = int(f.read())
num = num + 1
with open("files/num.txt", "w", encoding="utf-8") as f:
f.write(str(num))
print("次数:", num)
"""
csv是一种用逗号将一行数据隔开的文本文件,
这种文件可以用表格来打开,多用于数据处理中数据的提供和保存
"""
"""
Python的标准库中有一个csv库,专门用来提供和csv文件操作相关功能
(1)写数据
a.创建writer方式一
写对象= csv.writer(csv文件对象)
写对象.writerow(元素是一行内容的列表)
写对象.writerows (元素是列表的列表)
b.创建writer方式二
"""
import csv
# (1)csv文件的写操作方式一 -- 以列表的方式写入数据
with open("files/学生信息.csv", "w", encoding="utf-8", newline="") as f:
# a.写入数据
writer = csv.writer(f)
# 写入一行内容
writer.writerow(["姓名", "成绩", "年龄"])
# 同时写入多行内容
writer.writerows([
["cc", 77, 22],
["aa", 74, 20],
["bb", 76, 21]
])
with open("files/学生信息.csv", "a", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows([
["dd", 77, 22],
["ee", 74, 20],
["ff", 76, 21]
])
# (2)csv文件的写操作方式二 -- 以字典的方式写入数据
with open("files/商品信息.csv", "w", newline="", encoding="gbk") as f:
# 创建writer
writer = csv.DictWriter(f, ["name", "price", "count"])
# 单独添加头部数据(将字段名列表中的元素作为第一行的数据写入文件中)
writer.writeheader()
# 添加一条其他的数据
writer.writerow({
"name": "鞋子", "price": 300, "count": 44})
# 添加多条其他的数据
writer.writerows([
{
"name": "鞋子1", "price": 300, "count": 44},
{
"name": "鞋子2", "price": 400, "count": 54},
{
"name": "鞋子3", "price": 500, "count": 34},
{
"name": "鞋子4", "price": 600, "count": 64}
])
import csv
# 1.以列表的形式读数据
with open("files/商品信息.csv", newline="", encoding="gbk") as f:
# 获取文件中的内容,返回值reader本质就是一个迭代器,迭代器中的元素是每一行内容对应的列表
reader = csv.reader(f)
# a.一行一行的获取数据
# 单独取出第一行的数据
next(reader)
# 遍历其他行的数据
# for x in reader:
# print(x)
# b.同时获取所有数据
data = list(reader)
print(data)
# 2.以字典的形式读数据
with open("files/商品信息.csv", newline="", encoding="gbk") as f:
reader = csv.DictReader(f)
# 直接获取第一行数据对应的列表
# print(reader.fieldnames)
# # 遍历获取每一行数据对应的字典(需要将元素转换成字典)
# for x in reader:
# print(dict(x))
new_reader = list(map(lambda item: dict(item), reader))
print(new_reader)
all_name = list(map(lambda item: item["name"], new_reader))
print(all_name)
"""
json是一种特殊的数据格式,绝大部分编程语言都支持这种格式的数据的处理
一般在不同语言的程序之间进行数据交流的时候,数据的格式都是json格式
"""
json格式的数据要求:
(1)一个json有且只有一个数据
(2)唯一的这个数据必须是json支持的数据类型的数据
json支持的数据类型和表示方式:
数字类型 – 所有的数字,表示的时候直接写(支持科学计数法)
字符串 – 所有的文本数据,需要使用双引号
布尔类型 – 只有true和false两个值
数组类型 – [元素1,元素2,元素3,…]
字典类型 – {键值对}(键必须是字符串)
空值 – null(相当于Python中的None)
python标准库中提供了一个json模块,专门用来解决python中json数据的处理
"""
(1)python转json
int/float -- 数字
字符串 -- 双引号字符串
布尔值 -- True—>true,False->false
None -- null
列表,元组 -- 数组
字典 -- 字典
json.dumps(python数据) -- 将指定的python数据转换成对应的json格式的字符串
(字符串的内容符合json格式的要求的字符串就是json格式的字符串)
(2)json转python
数字 -- int/float
字符串 -- 字符串(引号会变成单引号)
布尔值 -- true->True,false->False
null -- None
数组 -- 列表
字典 -- 字典
json.loads(json格式的字符串) -- 将json格式字符串中的数据转换成相应python类型的数据
"""
import json
num = 48
num_json = json.dumps(num)
print([num_json]) # '48'
str1 = 'hello,json'
str1_json = json.dumps(str1)
print([str1_json]) # '"hello,json"'
print([json.dumps(True)]) # 'true'
print([json.dumps([1, 10, 'abc', True, False, None])]) # '[1, 10, "abc", true, false, null]'
tuple1 = (1, 10, 'abc', True, False, None)
print([json.dumps(tuple1)]) # '[1, 10, "abc", true, false, null]'
print([json.dumps({
'name': 'xiaoming', 10: 20, 'gender': False})]) # '{"name": "xiaoming", "10": 20, "gender": false}'
# 2.===================json转Python=================
result = json.loads('"abc"')
print([result]) # 'abc'
result = json.loads('235')
print([result]) # 235
result = json.loads('[10, "abc", true, null]')
print([result]) # [10, 'abc', True, None]
json_str = '''{
"msg": "sucess",
"code": 200,
"goodsList":[
{"name": "衬衣", "price": 125.5, "count": 2}
]
}
'''
result = json.loads(json_str)
print(result, type(result))
print(result['goodsList'][0]['price']) # 125.5