今天学习了文件和面向对象。
一,文件操作: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