• 视频、源码、课件、软件、笔记:超全面Python基础入门教程【十天课程】博客笔记汇总表【黑马程序员】

 

目录

01、复习

1.1、递归函数参数问题

1.2、格式化输出位数

1.3、extend函数解析

02、文件读操作

2.1、按字节读取文件:f.read()函数

2.2、按行读取文件:f.readlines()函数

03、模拟读取大文件

3.1、大文件有换行

3.2、大文件无换行

3.3、补充:计算机中的大小

04、文件打开模式

05、应用-文件备份

5.1、文件备份

5.2、文件备份优化

06、文件和文件夹的操作

07、应用-批量修改文件名

08、学生管理系统文件版

09、面向对象

9.1、概念介绍[了解]

9.2、类和对象[理解]

9.3、类的组成

9.4、类的抽象

9.5、类的定义

9.6、创建对象

10、今日总结


01、复习

1.1、递归函数参数问题

递归函数必须要传递参数吗?否!递归函数要嵌套调用自己,所以递归函数一般都有参数。若递归函数不要参数,可以使用global全局变量来控制递归函数,但使用global全局变量会降低递归函数的优势。

不是所有程序都可以使用递归,但是使用递归的程序一定可以使用循环。

# 递归函数一般都是有参数.
num = 10;def func():global num;if num == 1:returnnum = num - 1;print(num, end="、");func();func();  # 9、8、7、6、5、4、3、2、1、

1.2、格式化输出位数

1.3、extend函数解析

my_list = [20, 30]
print(my_list)  # [20, 30]def func(a):a += 50,  # 列表+= --> extend,即a.extend(20,)# 将元组中的数据逐个添加到列表中,extend(可迭代数据类型-容器):str、list、tuple、dict# 50:int型数据func(my_list)
print(my_list)  # [20, 30, 50]# 可迭代: 能使用。for循环就是可迭代的。

02、文件读操作

2.1、按字节读取文件:f.read()函数

# 1.打开文件
f = open('a.txt', 'r', encoding='utf-8')# 2.读写文件:文件对象.read(n)。n:一次读取多少字节的内容;默认不写,读取全部内容.
buf = f.read(3)
print(buf)  # 123
print('-'*30)
buf = f.read(3)
print(buf)# 3.关闭文件
f.close()

2.2、按行读取文件:f.readlines()函数

 

文件指针向后移动:f.readline()、f.readlines(),不重复读取文件内容。

f = open('a.txt', 'r', encoding='utf-8')
# f.readline()  # 一次读取一行的内容, 返回值是读取到的内容(str)
# buf = f.readline()
# print(buf)  # 1234# f.readlines()  # 按行读取,一次读取所有行,返回值是列表,列表中的每一项是一个字符串,即一行的内容
buf = f.readlines()
print(buf)  # ['1234\n', '56789']buf = [i.strip() for i in buf]  # strip去掉空白字符
print(buf)  # ['1234', '56789']
f.close()

03、模拟读取大文件

read():一次读取全部的内容,读到文件末尾会返回空。

3.1、大文件有换行

 

f = open('a.txt', 'r', encoding='utf-8')
while True:buf = f.readline()  # 一行一行地读取文件内容if buf:  # if len(buf) > 0  # 容器可以直接作为判断条件,容器中有内容为True;没有数据是Falseprint(buf, end='')else:# 文件读完了!breakf.close()

3.2、大文件无换行

f = open('b.txt', 'r', encoding='utf-8')
while True:buf = f.read(5)  # f.read(4096):一次读取4k的内容if buf:print(buf)  # print(buf, end='')else:breakf.close()

3.3、补充:计算机中的大小

计算机只认识0和1,根据电压高低。
进制:
    二进制:只有 0 和 1 组成,逢二进一;
    十进制:0 1 2 3 4 5 6 7 8 9,逢十进一;
    十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F,逢十六进一。
计算机最小的单位是 bit(位),只有两个数据值 0 和 1。
字节:是计算机中基本的储存单位byte。
1 byte = 8 bit
1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB ...

100Mbits、200Mbits、12.5MB/s、25MB/s

04、文件打开模式

文本文件:.txt、.py、.md,能够使用记事本打开的文件。
二进制文件:具有特殊格式的文件,.mp3、.mp4、.rmvb、.avi、.png、.jpg等。

文本文件可以使用文本方式打开文件,也可以使用二进制方式打开文件。

二进制文件,只能使用二进制的方式打开文件。
二进制打开方式(rb、wb、ab)如下:不管读取、还是书写,都需要使用二进制的数据。注意点:不能指定encoding参数。

访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
f = open('c.txt', 'wb')
f.write('你好!'.encode())  # encode()将str转换为二进制格式的字符串
f.write(b'0101')  # 二进制数据
f.close()f1 = open('c.txt', 'rb')
buf = f1.read()
print(buf)  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81',b代表二进制
print(buf.decode())  # 你好!
f1.close()# 图片、视频、音频本身就是二进制数据,不需要做转换!

05、应用-文件备份

5.1、文件备份

1. 用只读的方式,打开文件
2. 读取文件内容
3. 关闭文件
4. 只写的方式,打开新文件
5. 将第2步读取的内容写入新文件
6. 关闭新文件

思考:
    1. 如果文件比较大 ---> 循环读取文件;
    2. 复制备份的文件可能是.txt文件,可能是二进制文件 ---> 使用二进制方式打开文件。

# 1.用只读的方式,打开文件
f = open('a.txt', 'rb')
# 2.读取文件内容
buf = f.read()
# 3.关闭文件
f.close()
# 4.只写的方式,打开新文件
f_w = open('a[备份].txt', 'wb')
# 5.将第2步读取的内容写入新文件
f_w.write(buf)
# 6.关闭新文件
f_w.close()

5.2、文件备份优化

 

file_name = input('请输入要备份的文件名:')# 1.用只读的方式打开文件
f = open(file_name, 'rb')
# 2.读取文件内容
buf = f.read()
# 3.关闭文件
f.close()# 根据原文件名找到文件后缀和文件名
index = file_name.rfind('.')  # 找.的下标
# 后缀  file_name[index:],切片得到文件后缀
# 新文件名
new_file_name = file_name[:index] + '[备份]' + file_name[index:]
print(new_file_name)
# 4.只写的方式,打开新文件
f_w = open(new_file_name, 'wb')
# 5.将第2步读取的内容写入新文件
f_w.write(buf)
# 6.关闭新文件
f_w.close()

06、文件和文件夹的操作

  

# 对文件和目录的操作,需要导入os模块
import os# 1.文件重命名:os.rename(原文件路径名, 新文件路径名)
# os.rename('a.txt', 'aa.txt')# 2.删除文件:os.remove(文件的路径名)
# os.remove('aa.txt')# 3.创建目录:os.mkdir(目录路径名)-make directory
os.mkdir('test')
os.mkdir('test/aa')# 4.删除空目录:os.rmdir(目录名)-remove directory
# os.rmdir('test/aa')# 5.获取当前所在的目录:os.getcwd()-get current working directory
buf = os.getcwd()
print(buf)  # F:\JetBrains\2pythonSpace\pythonCode\day07-文件# 6.修改当前的目录:os.chdir(目录名)-change dir
os.chdir('test')
buf = os.getcwd()
print(buf)  # F:\JetBrains\2pythonSpace\pythonCode\day07-文件\test# 7.获取指定目录中的内容:os.listdir(目录), 默认不写参数,是获取当前目录中的内容
# 返回值是列表, 列表中的每一项是文件名
buf = os.listdir()  # test
print(buf)  # ['aa']

07、应用-批量修改文件名

import osdef create_files():for i in range(10):file_name = 'test/file_' + str(i) + '.txt'print(file_name)f = open(file_name, 'w')f.close()def create_files_1():os.chdir('test')for i in range(10, 20):file_name = 'file_' + str(i) + '.txt'print(file_name)f = open(file_name, 'w')f.close()os.chdir('../')  # ../ 上一级目录,切换回上一级目录def modify_filename():os.chdir('test')  # 切换到test目录buf_list = os.listdir()  # 文件列表# print(buf_list)for file in buf_list:new_file = 'py_' + fileos.rename(file, new_file)os.chdir('../')def modify_filename_1():os.chdir('test')buf_list = os.listdir()# print(buf_list)for file in buf_list:num = len('PY_')new_file = file[num:]os.rename(file, new_file)os.chdir('../')# create_files()
# create_files_1()
# modify_filename()
# modify_filename_1()

08、学生管理系统文件版

学生管理系统,一名学生信息:{'name': 'isaac', 'age': 18, 'gender': m}

原版保存学生信息方式,列表:[{}, {}]
文件版:需要将所有的学生信息保存的到文件中。最简单的的方法是:将整个列表保存到文件中,'[{}, {}, {}]' 。
w方式将信息写入文件。

从文件中读取信息:读取'[{}, {}, {}]'  --->  [{}, {}, {}],字符串转列表使用eval()函数。

def save():  # 保存功能
    # 1.打开文件
    f = open('student.txt', 'w', encoding='utf-8')
    # 2.写入学生信息
    f.write(str(stu_list))  # write()只能写字符串
    # 3.关闭文件
    f.close()

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()

def main():
    load_file()  # 只执行一次
    while True:
        ...

import osstu_list = []  # 定义学生列表,保存所有的学生信息def show_menu():print('1.添加学生')print('2.删除学生')print('3.修改学生信息')print('4.查询单个学生信息')print('5.查询所有的学生信息')print('6.退出系统')def insert_student():# 1.通过input函数获取学生的信息:姓名、年龄、性别name = input('请输入学生名字:')# [{}, {}, {}]  判断的是字典中的value是否存在for stu in stu_list:if stu['name'] == name:print('----------学生信息存在---------')return  # 结束函数的执行age = input('请输入学生年龄:')gender = input('请输入学生性别:')# 2.将学生信息转换为字典进行保存stu_dict = {'name': name, 'age': int(age), 'gender': gender}# 3.将这个学生字典添加的列表中stu_list.append(stu_dict)print('==============学生信息添加成功====================')def remove_student():# 1.使用 input 获取要删除 /修改/查询 的学生姓名name = input('请输入要操作的学生的名字:')# 2.判断学生信息是否存在for stu in stu_list:if stu['name'] == name:# 3.学生存在,对学生进行 删除/修改/查询 操作stu_list.remove(stu)# returnbreak# 4.学生信息不存在,直接结束else:print('***********该学生信息不存在,无法删除**************')def modify_student():# 1.使用 input 获取要删除/修改/查询的学生姓名name = input('请输入要操作的学生的名字:')# 2.判断学生信息是否存在for stu in stu_list:if stu['name'] == name:# 3.学生存在,对学生进行删除/修改/查询操作stu['age'] = int(input('请输入新的年龄:'))# returnbreak# 4.学生信息不存在,直接结束else:print('***********该学生信息不存在,无法修改**************')def search_student():# 1.使用input获取要删除/修改/查询的学生姓名name = input('请输入要操作的学生的名字:')# 2.判断学生信息是否存在for stu in stu_list:if stu['name'] == name:# 3.学生存在,对学生进行删除/修改/查询操作print(f'姓名:{stu["name"]}, 年龄:{stu["age"]}, 性别:{stu["gender"]}')# returnbreak# 4.学生信息不存在,直接结束else:print('***********该学生信息不存在**************')def show_all_info():if len(stu_list) > 0:for stu in stu_list:print(f'姓名:{stu["name"]}, 年龄:{stu["age"]}, 性别:{stu["gender"]}')# print(stu)else:print('目前没有学生信息')def save():# 1.打开文件f = open('student.txt', 'w', encoding='utf-8')# 2.写入学生信息f.write(str(stu_list))  # write()只能写字符串# 3.关闭文件f.close()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()def main():load_file()  # 只执行一次while True:show_menu()opt = input('请输入用来选择的操作编号:')if opt == '1':# print('1.添加学生')insert_student()elif opt == '2':# print('2.删除学生')remove_student()elif opt == '3':# print('3.修改学生信息')modify_student()elif opt == '4':# print('4.查询单个学生信息')search_student()elif opt == '5':# print('5.查询所有的学生信息')show_all_info()elif opt == '6':print('欢迎下次使用本系统......')save()breakelse:print('输入有误,请再次输入!')continueinput('...... 回车键继续操作.......')main()

09、面向对象

9.1、概念介绍[了解]

面向对象和面向过程,是两种编程思想。编程思想是指对待同一个问题,解决问题的套路方式。

  • 面向过程:注重的过程,实现的细节。亲力亲为。

    • 函数

  • 面向对象:关注的是结果、偷懒。

    • 封装、继承和多态(三大技术)

9.2、类和对象[理解]

类和对象,是面向对象中非常重要的两个概念。

    • 类是泛指的,指代多个,是由对的抽象来的。

    • 在代码中,是通过关键字class定义的。

  • 对象

    • 对象是特指的,指代一个,是具体存在的。

    • 在代码中,对象是由类创建的、类是由对象抽象而来的。

9.3、类的组成

类(Class)由3个部分组成:

  1. 类的名称:类名

  2. 类的属性:一组数据,特性、变量。一个类的属性有很多,只关注需要使用的,没有用到的不用管。

  3. 类的方法:允许对类进行操作的方法、行为、函数。

9.4、类的抽象

名词提炼法、所见即所得

9.5、类的定义

随后的代码,使用狗类进行演示说明。
类名:Dog(狗类)
属性:
    姓名 name
    年龄 age
    ...
方法:
    吃  eat()
    玩  play()
    ...

# 在python中,定义类使用关键字class,语法如下
"""
object是所有的类基类,即最初始的类
类名: 遵循大驼峰的命名规范
class 类名(object):类中的代码
"""# 定义方式1(推荐)
class Dog1(object):pass# 定义方式2(不推荐)
class Dog2():  # 括号中的内容可以不写pass# 定义方式3(不推荐)
class Dog3:  # 括号可以不写pass"""
新式类: 直接或者间接继承object的类。在python3中,所有的类默认继承object类,即python3中所有的类都是新式类.
旧式类(经典类): 已经过时,不推荐使用
"""

9.6、创建对象

在代码中,对象是由类创建的。

# 定义类
class Dog(object):# 在类中定义的函数,称为方法,函数的所有知识都可以使用def play(self):  # 暂时不管selfprint('小狗快乐的拆家中...')# 创建对象:变量 = 类名()
dog1 = Dog()  # 创建一个对象:dog1
print(id(dog1))  # 1431080367296dog2 = Dog()  # 创建一个对象:dog2
print(id(dog2))  # 1431084685728# 可以使用对象调用类中的方法:对象.方法名()
dog1.play()  # 小狗快乐的拆家中...
dog2.play()  # 小狗快乐的拆家中...

10、今日总结

Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】相关推荐

  1. Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...

  2. Python基础:集合与文件操作

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  3. Python基础(十)--文件相关

    目录 Python基础(十)--文件相关 1 读写文件 1.1 获取文件对象 1.2 文件读取 1.3 文件写入 1.4 文件定位 2 文件与路径的操作 2.1 os模块 2.2 os.path模块 ...

  4. Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义

    Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义 文章目录 Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义 1.r'xxx' 的含义 2.u'xxx' 的 ...

  5. 文件及文件夹操作- File类、Directory 类、FileInfo 类、DirectoryInfo 类

    命名空间:using system .IO; 1. File类: 创建:File.Create(路径);创建文件,返回FileStream FileStream fs = File.Create(路径 ...

  6. python读取文本文档内容并存入列表内_【Python基础】文本文件读写

    作者: eavea 发表日期: 2020年04月14日 分类: 后端技术 标签: Python 阅读次数: 3,358 评论数: 0 条 [Python基础]文本文件读写 Python中常用文件读写方 ...

  7. python应用中调用spark_在python中使用pyspark读写Hive数据操作

    1.读Hive表数据 pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语 ...

  8. Python基础必掌握的文件读写操作详解

    读取和写入文件等操作是 Python 可以完成的最常见任务之一.无论是写入简单的文本文件,读取复杂的服务器日志,甚至分析原始字节数据,进行相关的处理操作,最终所有这些情况都需要读取或写入文件. 整套学 ...

  9. python基础语法-对目录(文件夹)的操作

    这里只介绍基础的常用操作,更多操作可以查看官方参考文档. 文件夹操作需要引入标注库的os模块. 1.创建目录 os.makedirs(path) 其中的path之路径,可以绝对路径(指定盘符,每一步文 ...

最新文章

  1. 各种排序算法及其java程序实现
  2. Springboot使用Log4j2的配置详解
  3. Java中Comparator比较器的使用以及使用lamba简化代码
  4. 通过profile 用maven命令打不同配置的变量包
  5. string 都不能作用于switch_这个东西看似细细的,作用大大滴!每个人的牙齿都不能没有它!...
  6. 艾媒2018年度手机输入法报告出炉:百度输入法是语音识别最准的输入法
  7. hihoCoder - 1075 开锁魔法III
  8. OBJECT_ID(Transact-Sql)
  9. LINUX下载编译uuid
  10. 用python智能修复度盘防和谐链接~
  11. linux中匹配邮箱地址,Python正则匹配邮箱和电话号码
  12. c语言编写一个程序计算某年某月有几天,c语言:输入某一年的第几天,计算并输出它是这一年的第几月第几日,具体怎样编程...
  13. Layui 后台ajax 腾讯地图 多点标记mark
  14. 生命在于学习——代码审计工具
  15. awk中RS,ORS,FS,OFS区别与联系
  16. 语言认知模型--的学习笔记
  17. java一维数组输入整数n_用键盘接受输入的整数,将输入的整数保存到一个一维数组,然后输出最大值...
  18. 数据库读写分离与分库分表
  19. [紧急]华展云再次连夜更新200余本16年会刊,2016年会刊量级已达全网第一
  20. 设计美学 第二章 设计的媒介力量

热门文章

  1. access如何查询两张表的内容_为什么可以的话,不要使用星号 *,而是相应的字段名来进行查询 MySQL内连接如何选择驱动表
  2. idea设置scanner = new Scanner(System.in);的实时模板
  3. java获取环境路径方法_JAVA获取服务器路径的方法
  4. 五十六、教用Python中的turtle海龟画图(上篇)
  5. Hugging Face官方课程来了!Transformers库维护者之一授课,完全免费
  6. 从4篇论文看Transformer的局部信息建模
  7. VisDA-2020亚军技术方案分享
  8. 关于Transformer和BERT,在面试中有哪些细节问题?
  9. 用文本指导文本:基于文本的自监督可控文本生成模型
  10. 长安大学第三届ACM-ICPC程序设计竞赛 E题