小白学习Python的第十三天

一. 包的使用

1.什么是包

"""
包含__init__.py文件的文件夹就是包
包用来对py文件(模块)进行分类管理的或者是封装
"""

2.怎么使用包中的模块

"""
1)import 包名.模块名
包名.模块名.变量

2)import 包名.模块名 as 新名
对 '包名.模块名' 进行重命名,命名通过 '新名.变量' 的方式使用变量 

3)from 包名 import 模块名1, 模块名2, 模块名3,...
模块名.变量

4)from 包名 import 模块名1 as 新模块名1, 模块名2, 模块名3,...

5)from 包名.模块名 import 变量1, 变量2, 变量3,...
"""
# jsonFile
def j_func():
    print('json中的函数')


j_a = 100
# bytesFile
b_a = 'abc'


def b_func():
    print('bytes中的函数')
# 导入方式一
import fileManager.jsonFile
print(fileManager.jsonFile.j_a)
fileManager.jsonFile.j_func()
# 导入方式二
import fileManager.jsonFile as jsonFile
jsonFile.j_func()
print(jsonFile.j_a)
# 导入方式三
from fileManager import jsonFile, bytesFile
jsonFile.j_func()
print(jsonFile.j_a)

print(bytesFile.b_a)
bytesFile.b_func()
# 导入方式五
from fileManager.jsonFile import j_a, j_func
print(j_a)
j_func()

3.定制包的__init__.py文件

"""
不管用什么样的方式导入包或者包中的内容的时候,系统都会先去执行__init__.py文件
"""
# __init__.py
# 情况1 - 如果觉得名字太长可以用as改名
# import fileManager.jsonFile as jsonFile
# import fileManager.bytesFile as bytesFile

# 情况2 - 直接将包的模块导入,使用时直接可以使用包名.变量
# from fileManager import jsonFile, bytesFile


# j_func1 = jsonFile.j_func
# b_func1 = bytesFile.b_func


# 情况3 - 如果要增加一个文件读写操作,可以在里面定制
# def read_file():
#    print('读文件')
# 情况1
import fileManager
fileManager.jsonFile
fileManager.bytesFile
# 情况2
import fileManager
fileManager.j_func1()

from fileManager import j_func1
j_func1()
# 情况3
import fileManager
fileManager.read_file()

from fileManager import read_file

二. 文件操作

1.数据持久化

"""
1)计算机存储数据
程序中的数据默认情况下都是保存在运行内存中,保存在运行内存中的数据在程序结束后会自动销毁。
保存在磁盘中的数据,除非主动删除或者磁盘损坏,数据会一直存在。

2)持久化
将程序中的数据通过文件保存在磁盘中,这个过程就是数据持久化的过程。
持久化工具:普通文本文件(.txt)、数据库文件(.db、.sqlite)、json、plist文件、csv文件、excel文件等
"""

2.文件操作(操作文件内容)

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

3.python实现文件操作

# ==========1)打开==========
"""
open(file, mode='r', ... ,encoding=None) - 以指定的方式打开指定的文件并且返回(返回的是文件对象)

file - 字符串,需要打开的文件路径
       路径:
       绝对路径 - 文件在计算机中的全路径
       相对路径 - 用 . 来代替文件全路径的部分,只写部分路径
                .   -   表示当前目录(当前代码文件所在的目录),可以省略
                ..  -   表示当前目录的上层目录
                ... -   表示当前目录的上层目录的上层目录

mode    -   字符串,打开方式(决定打开文件后文件能支持的操作;决定读写数据的类型)
            'r'    -    表示只读(默认)
            'w'    -    表示只写,打开的时候会先清空文件
            'a'    -    表示只写,打开的时候会保留源文件内容
            
            't'    -    表示文本数据,对应str类型(默认)
            'b'    -    表示二进制数据,对应bytes类型

            'rt'/'tr'/'r'

注意:1)以读的形式打开一个不存在的文件会报错;
        以写的形式打开一个不存在的文件不会报错,并且会自动创建
     2)如果是文本文件,打开的时候可以是'b'也可以是't';
        如果是非文本文件,打开的时候只能带'b'

encoding - 设置文本文件的编码方式,一般使用'utf-8'
           注意:
           1)创建文件和打开文件、读和写对应的编码方式要一致
           2)打开的时候如果带了'b',不能设置encoding

"""
# 1.file - 文件路径
# 1)绝对路径
path1 = r'F:\python project\01-语言基础\Day13-包和文件操作\files\message.txt'

# 2)相对路径
# .    -    代表文件夹 'Day13-包和文件操作'
path2 = './files/message.txt'
path3 = 'files/message.txt'
# ..   -    代表文件夹 '01-语言基础'
path4 = '../Day13-包和文件操作/files/message.txt'

open(path4)
# 2.mode - 读写方式
# 1)读
f = open(path3, 'r')
result = f.read()
# f.write('abc')   # io.UnsupportedOperation: not writable
print(type(result))

# 2)写
f = open(path3, 'a')
# f.read()   # io.UnsupportedOperation: not readable

f = open(path3, 'w')
f.write('abc')
# 3)打开不存在的文件
open('files/test.txt', 'r')   # FileNotFoundError: [Errno 2] No such file or directory: '.files/test.txt'
open('files/test.txt', 'a')   # 不报错,自动创建test.txt文件
open('files/test1.txt', 'w')   # # 不报错,自动创建test1.txt文件
# ==========2)关闭==========
# 文件对象.close()
# 文件关闭后不能再进行读写操作
f = open(path3)
f.close()
# ==========3)读写==========
"""
1.读
文件对象.read() - 从读写位置开始读到文件结尾
文件对象.readline() - 从读写位置开始读到一行结尾(只能用于以't'打开的文本文件)

文件对象.seek(0) - 将读写位置移动到文件开头(读的方式打开读写位置默认再文件开头,
写的方式打开读写位置默认再文件结尾)

2.写
文件对象.write(数据) - 将指定数据写入文件中(从读写位置开始写)
"""
# f = open('files/data.txt', encoding='utf-8')
# result = f.read()
# print('第一次读', result)
#
# f.seek(0)
# result = f.read()
# print('第二次读', result)
#
# f.seek(0)
# result = f.readline()
# print('第一行', result)
# result = f.readline()
# print('第二行', result)


# f = open('files/data.txt', 'a')
# f.write('123')
# 将数据写到最前面
f = open('files/data.txt')

result = 'start!\n'+result
f = open('files/data.txt', 'w')
f.write(result)
f.close()

三. 数据持久化

1.怎么做到数据的持久化

"""
1)创建一个文件用来保存需要持久化的数据
2)需要这个数据的时候从文件中获取这个数据
3)如果在程序中对这个数据进行了修改,需要将最新的数据更新到文件中
"""
f = open('files/count.txt')
num = int(f.read())
num += 1
print(num)

f = open('files/count.txt', 'w')
f.write(str(num))
f.close()
# 练习1:添加学生
# a.每运行一次程序添加一个学生,并且打印已经添加过的学生
# b.每运行一次程序添加一个学生,并且以列表的形式打印已经添加过的学生

# a
stu = input('学生名:')

f = open('files/students.txt')
re = f.read()

print(re + stu)

f = open('files/students.txt', 'a')
f.write(f'{stu} ')

# b
stu = input('学生名:')
f = open('files/students.txt')
re = f.read()
all_students = eval(re)

all_students.append(stu)
print(all_students)

f = open('files/students.txt', 'w')
f.write(str(all_students))

猜你喜欢

转载自blog.csdn.net/bbbbbya/article/details/109101941