今天学习了文件和面向对象。

一,文件操作:1.对文件内容的操作有读read(n),readline() 按行读取,返回值是str,

readlines() 一次性读取所有的行 和写write(),返回值是写入的字节数。

2.打开方式:文本方式r读,w写,a追加,和二进制方式rb,rw,ab.

3.对目录和文件进行操作,前提是要先进行导包

import os

重命名os.rename,删除remove,创建mkdir,删除目录rmdir,获取当前目录getcwd,切换路径/目录chdir,获取目录中的内容listdir,判断文件是否存在path.exist

# 文件操作:打开文件open(),读write写read文件,关闭close文件
# 文件的读操作
# 文件对象.read(n),n表示一次读取多少字节的内容,或者不写,默认读取所有字节

f = open('1.txt','r',encoding='utf-8')
bnf = f.read()
print(bnf)
f.close()

# 按行读取操作,一次读一行 .readline(),返回值是读取道德内容(str)
f = open('a.txt','r',encoding='utf-8')
# bnf = f.readline()
# .readlines()一次性读取所有行,返回的是列表,列表中的每一项是一个字符串,即一行的内容
bnf = f.readlines()  # ['nihaoya\n', 'hello python\n', '您好呀']
# 想要去掉换行符 strip()
bnf = [i.strip() for i in bnf]
print(bnf)
f.close()

# 模拟读取大文件
# read()一次性读取全部内容
# read()读到文件末尾会返回空
f = open('a.txt','r',encoding='utf-8')
while True:
    buf = f.readline()  # 每次读取一行
    if buf:
        # if len(buf)> 0,容器,可以直接作为判断条件,容器内有内容为True,没有就是False
        print(buf,end = '')
    else:
        # 文件读完了
        break
f.close()

# 如果文件中只有一行数据
f = open('b.txt','r',encoding='utf-8')
while True:
    buf = f.read(5)  # 每5个输出
    if buf:
        print(buf,end=' ')
    else:
        break
f.close()

# 补充:计算机中的大小
# 计算机只认识0和1
# 进制:二进制,只有0和1组成,二进一
# 十进制:平时使用的,十进一
# 十六进制:0-9 a,b,c,d,e,f,十六进一
# 计算机中最小的单位bit(位),只有两个数据值01
# 字节:计算机中基本的存储单位 byte
# 1byte = 8bit
# 1KB = 1024byte
# 1MB = 1024 KB
# 1GB = 1024MB
# 1TB = 1024GB


# 文件的打开模式:
# 文本文件: .txt .py 能够使用记事本打开的文件
# 二进制文件:具有特殊格式的文件:MP3,MP4,avi等
# 文本文件可以使用文本方式打开,也可以使用二进制方式打开文件
# 二进制文件,只能由二进制方式打开文件
# 二进制打开方式:rb,wb,ab,不能指定encoding参数
f = open('c.txt','wb')
f.write('你好呀'.encode())  # encode()将str转换为二进制格式的字符串
f.close()

f1 = open('c.txt','rb')
buf = f1.read()
print(buf)  # 二进制
print(buf.decode())  # 文字
f1.close()

# 文件备份
# 1.使用只读方式打开文件,读取文件内容,关闭文件
# 2.用只写的方式打开新文件,将读取的内容写入新文件,关闭新文件
# 如果文件较大,循环读取文件
# 复制备份的文件可能是txt文件,可能是二进制文件,所以使用二进制文件打开
f = open('a.txt','rb')
buf = f.read()
f.close()
f_w = open('a备份.txt','wb')
f_w.write(buf)
f_w.close()

# 优化版本
file_name = input('请输入要备份的文件名')
# 读文件
f = open('1.txt','rb')
buf = f.read()
f.close()
# 根据原文件名,找到文件后缀和文件名
index = file_name.rfind('.')
# 后缀 file_name[index:] 切片
# 文件名:file_name[ :index]
new_file_name = file_name[:index] + '备份'+ file_name[index:]
# print(new_file_name)
# 写入新文件
f_w = open(new_file_name,'wb')
f_w.write(buf)
f_w.close()
'''
import os


import os
# 文件,目录的相关操作,需要导包
# os模块!!!
# 1.文件重命名 .rename(原文件,新文件)
# os.rename('a.txt','aa.txt')

# 2.删除文件 .remove(文件路径名)
# os.remove('a备份.txt')

# 3.创建目录 .mkdir(目录名)
# os.mkdir('tst')
# os.mkdir('tst/aa')

# 4.删除空目录 .rmdir(目录名)
# os.rmdir('tst/aa')

# 5.获取当前所在的目录 .getcwd()
# buf = os.getcwd()
# print(buf)

# 6.修改当前的目录 .chdir()
# os.chdir('tst')
# buf = os.getcwd()
# print(buf)

# 7.获取指定目录中的内容 .listdir(),默认当前目录
# 返回值是列表,列表中的每一项是文件名
# buf = os.listdir()
# print(buf)

# 批量创建文件名


def  create_files():
    for i in range(10):
        file_name = 'tst/file_ ' + str(i) + '.txt'
        print(file_name)
        f = open(file_name,'w')
        f.close()


def create_files_1():
    os.chdir('tst')
    for i in range(10,20):
        file_name = 'file_ ' + str(i) + '.txt'
        print(file_name)
        f = open(file_name,'w')
        f.close()
    os.chdir('../')  # ../ 上一级目录


# create_files()
# create_files_1()

# 批量修改文件名
def modify_file_name():
    os.chdir('tst')  # 切换当前目录
    buf_list = os.listdir()
    # print(buf_list)
    for file in buf_list:
        new_file = 'py43' + file
        os.rename(file,new_file)
    os.chdir('../')


def modify_file_name_1():
    os.chdir('tst')
    buf_list = os.listdir()
    # print(buf_list)
    for file in buf_list:
        num = len('py43')  # 找出长度,然后使用切片
        new_file = file[num:]
        os.rename(file,new_file)
    os.chdir('../')


# modify_file_name()
modify_file_name_1()

# 批量删除
def remove_file():
    os.chdir('tst')
    buf_list = os.listdir()
    for file in buf_list:
        os.remove(file)
    os.chdir('../')
remove_file()

# 学生管理系统文件版
# 前面的是使用字典保存一个学生信息,所有的学生信息是列表
# 需要将所有的信息保存到文件中,最简单的方法,是将整个列表保存发到文件中
# def save():  # 增加保存,再退出系统时保存
#     # 1.打开文件
#     f = open('student.txt','w')
#     f.write(str(stu_list))  # 强制转换
#     f.close()

# eval 就可以便变成列表
# stu_list 读取
# def load_file():
#     global stu_list
#     if os.path.exists('student.txt'):
#         f = open('student.txt','r',encoding='utf-8')
#         buf = f.read()
#         if buf:
#             stu_list = eval(buf)
#         f.close()

二,面向对象:1.面向对象和面向过程概念,都是编程思想。

2.面向对象三大技术:封装继承多态

三,类和对象相关知识。类的组成:类名,属性,方法。

定义类:class 类名(object):pass

创建对象:类名(),调用类中的方法:对象.方法名()

# 面向对象,编程思想,是指对待同一个问题解决方法的套路方式,
# 面向对象的特点是封装继承多态
# 面向过程:注重过程,实现细节,亲历亲为
# 面向对象:关注的是结果

# 类和对象
# 类:类是泛指的,指代多个,由对的抽象而来,由关键字’class‘创建的
# 对象是特质的,具体存在的,在代码中,对象是由类创建的

# 类的构成:类名;属性:特征,变量,方法:行为,函数
# 只关注使用到的属性
# 类的抽象:1.名词提炼法;2.所见即所得

# 类的定义(dog类)
# 类名:Dog
# 属性:name,age
# 方法:run,eat,play
"""
object 是所有类基类,即最初是的类
类名:第一个字母大写
class 类名(object):
    类中的代码
    
新式类:直接或者简洁继承object的类,在python3中,所有的类都是新式类
旧式类(经典类):过时,不推荐
"""

# 定义的三种方法:
class Dog(object):  # 推荐
    pass

class Dog1():  # 括号中可以不写
    pass

class Dog2:  # 括号也可以不写
    pass


# 创建对象 变量 = 类名()
# 对象是由类创建的


class Dog(object):
    # 在类中定义的函数,成为方法,函数的所有知识都可以使用
    def play(self):  # 暂时不管self
        print('小狗....')


dog = Dog()
print(id(dog))
dog1 = Dog()
print(id(dog1))
# 可以使用对象调用类中的方法,对象.方法名()
dog.play()
dog1.play()

# while True:pass
# 使用场景:在书写代码时,不确定循环一共多少次,就是不知道循环在什么时候结束
# 在代码中使用if判断,当不满足时使用break终止循环

下面 是 测试题,今天好绕。

# 测试题
# 1.向movie.txt文件中写下内容:
f = open('movie.txt','w',encoding='utf-8')
f.write('功夫:周星驰\n一出好戏:黄渤\n我不是药神:徐峥')
f.close()

# 2.打开第一题中的文件并读取内容,2.1一次全部读取;2.2每次读取一行
f = open('movie.txt','r',encoding='utf-8')
# buf = f.read()
# print(buf)

# buf = f.readlines()
# print(buf)
while True:
    buf = f.readline()
    if buf == '':
        break
    print(buf)
f.close()

import os
# 3.使用os创建一个”档档“的文件夹
# os.mkdir('档档')
# 3.1获取文件夹当前所在目录
# print(os.getcwd())
# 3.2获取当前目录列表
# print(os.listdir('./'))
# 3.3改变文件的操作路径
# print(os.chdir('../'))
# 3.4删除文件夹
# os.rmdir('档档')

# 4.完成两份文件之间的相互备份
file_name = input('请输入文件名:')  #让用户输入文件名

f = open(file_name,'w',encoding='utf-8')  # 写入内容
f.write('功夫:周星驰\n一出好戏:黄渤\n我不是药神:徐峥')
f.close()

f1 = open(file_name,'r',encoding='utf-8')  # 打开将内容打印出来
con = f1.readlines()
print(con)
f1.close()

# 先提取后缀名
file = file_name.rfind('.')
if file > 0:
    flag = file_name[file:]

# 组成新名字
new_name = file_name[:file] + '备份' + flag

# 创建备份
new_file = open(new_name,'w',encoding='utf-8')
for i in con:
    print(i)
    new_file.write(i)
new_file.close()

# 将数据写入备份,打开备份查看内容
f = open(new_file,'r',encoding='utf-8')
con = f.read()
print(con)
f.close()

import os
# os.mkdir('py')
os.chdir('py')
# for i in range(1,6):
#     f = open(f'python班级-{i}.txt','w')
#     f.close()
# 改名
file = os.listdir()  # 找出文件夹下名字列表
for i in file:  # 循环遍历
    new_file = '档' + i
    os.rename(i,new_file)  # 旧名i