文件和数据库操作

学习目标

  • 掌握操作文本文件方式
  • 掌握操作JSON文件方式
  • 掌握数据库查询方式
  • 掌握数据库增删改方式

1. 基本文件操作语法

            
"""
操作文本:
1.打开文件,返回文件对象:
    open(r"文件路径", "打开方式", encoding="utf8")
2.读取文件、写入文件
    文件对象.read()         # 读取文件
    文件对象.write("内容")  # 写入内容
3.关闭文件
    文件对象.close()
"""
            
        

案例1. 打开文件---只读文件----关闭文件

            
# 打开文件---只读文件----关闭文件
file_1 = open(r"test.txt", "r", encoding="utf8")   # 打开文件。第一个r在字符串前表示,字符串不转义;第二个r表示文件只读
data = file_1.read()    # 读取内容
print(data)
file_1.close()  # 关闭文件
            
        

案例2. 打开文件---修改替换文件内容---关闭文件

            
# 打开文件---修改替换文件内容---关闭文件
file_2 = open(r"test.txt", "w", encoding="utf8")
file_2.write("hello python")
file_2.close()
            
        

案例3. 打开文件---追加文件内容----关闭文件

            
# 打开文件---追加文件内容----关闭文件
file_3 = open(r"test.txt", "a", encoding="utf8")
file_3.write("\n佛跳墙")
file_3.close()
            
        

文件操作练习一:有a、b两个文本文件,将a文件的内容复制到b文件里

参考代码:

            
file_4 = open(r"test.txt", "r", encoding="utf8")
data = file_4.read()
file_5 = open(r"b.txt", "w", encoding="utf8")
file_5.write(data)
file_4.close()
file_5.close()
            
        

案例4. 打开文件---一行一行读取文件内容----关闭文件

            
file_6 = open(r"test.txt", "r", encoding="utf8")
while True:
    line_1 = file_6.readline()  # 读取一行内容
    print(line_1, end='')       # 打印一行内容,结束符改为空字符,即不会再次换行
    if line_1 == '':            # 当读取到的行内容为空时,即最后末尾无内容可读
        break                   # 退出循环
file_6.close()
            
        

文件操作练习二:读取a文件里的偶数行进行打印

参考代码:

            
file_7 = open(r"test.txt", "r", encoding="utf8")
i = 1  # 行号
while True:
    line_1 = file_7.readline()  # 读取一行内容
    if i % 2 == 0:
        print(line_1, end='')  # 打印一行内容,结束符改为空字符,即不会再次换行

    if line_1 == '':  # 当读取到的行内容为空时,即最后末尾无内容可读
        break  # 退出循环
    i += 1
file_7.close()
            
        

案例5. 打开文件---读取文件的全部行,存入列表---关闭文件

            
# 打开文件---读取文件的全部行,存入列表---关闭文件
file_8 = open(r"test.txt", "r", encoding="utf8")
lines = file_8.readlines()  # 一次性读取全部文本内容,返回list列表,每一行是列表中的一个元素
for x in lines:     # 遍历list列表
    print(x,end='')
file_8.close()
            
        

打开文件--只读文件--关闭文件的with写法:

            
with open(r"test.txt", "r", encoding="utf8") as file_9:
    data = file_9.read()
    print(data)
file_9.close()
            
        

2. 回顾json格式

            
"""
json文件特有的格式:
{}表示一个对象
[]表示一个数组
元素是键值对的形式
每个键值对之间,以,英文逗号分隔

json的格式规则与python的dict字典数据类型非常相似

注意: json的键值对如果有引号,使用的是双引号;python字典的键值对如果有引号,则默认使用的是单引号
"""
            
        

3. 打开json文件--读取内容[转换成字典类型]--关闭文件

            
import json    # 需要先导入json包

# 打开json文件--读取内容[转换成字典类型]--关闭文件
file_1 = open(r"a.json","r",encoding="utf8")
data = json.load(file_1)    # 将json格式的内容转换成python的字典类型,赋值给data变量
print(data, type(data))
file_1.close()
            
        

4. 将python字典转换成json格式后,写入json文件--关闭文件

            
dict_2 = {"姓名":"宋仲基", "性别": "男","年龄": 25}
file_2 = open(r"a.json","w",encoding="utf8")
json.dump(dict_2,file_2,ensure_ascii=False)
file_2.close()
            
        

5. 将python字典转换成json格式

            
dict_1 = {"姓名":"李俊基", "性别": "男","年龄": 28}
json_1 = json.dumps(dict_1,ensure_ascii=False)  # 将字典转成json格式,为了避免中文被转义,ensure_ascii需要设置为false
print(json_1,type(json_1))
            
        

6. 将json格式转换成字典类型

            
str_1 = '{"姓名": "白敬亭", "性别": "男", "年龄": 20}'
dict_3 = json.loads(str_1)
print(dict_3,type(dict_3))
            
        

7. 数据库查询

            
import pymysql

# 创建数据库连接池对象
conn = pymysql.connect(host='localhost', user='root',passwd='123456',db='phms',port=3309,charset='utf8')

# 创建操作游标
cur = conn.cursor()

# 编写sql
sql = 'SELECT * FROM user;'

# 执行sql,接收执行结果
row = cur.execute(sql)  # 执行sql,并返回总行数
data = cur.fetchall()   # 获取sql的执行结果

# 将结果加入业务需求
# 假设业务为:打印出当前所有用户信息
print(data)
for i in data:
    print(i)

    # 关闭游标
cur.close()

# 关闭数据库连接池
conn.close()
            
        

8. 数据库修改

根据给出不同增、删、改的sql语句,完成不同的数据库操作,语法如下:

            
import pymysql

# 创建数据库连接池对象
conn = pymysql.connect(host='localhost', user='root',passwd='123456',db='phms',port=3309,charset='utf8')

# 创建操作游标
cur = conn.cursor()

# 编写sql
sql = "INSERT INTO `phms`.`pet` (`id`, `user_id`, `name`, `weight`, `height`, `type`, `birthday`, `create_time`) VALUES ({}, 42, '小白{}', 10, 30, '2', '2022-10-11 10:42:04', '2022-10-20 10:42:10')"
# 调整sql(格式化sql),执行sql

id = 35
for i in range(5):
    new_sql = sql.format(id, id)
    row = cur.execute(new_sql)
    id += 1

    # 提交操作
conn.commit()   # 提交以上所有修改(指:新增、修改、删除)操作

# 关闭游标
cur.close()
# 关闭数据库连接池
conn.close()