小言_互联网的博客

Python入门学习笔记(四)

365人阅读  评论(0)

本文是在黑马程序员网课课件基础上修改的学习笔记

课程原地址:https://www.bilibili.com/video/BV1o4411M71o
Python入门学习笔记(一)
Python入门学习笔记(二)
Python入门学习笔记(三)

二十一、文件操作

基本操作

打开

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

open(name, mode) 

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
mode:设置打开文件的模式(访问模式):只读、写入、追加等

打开文件模式

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
r+ 打开一个文件用于读写。文件指针将会放在文件的开头
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写⼊
ab 以二进制格式打开一个文件⽤于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写⼊入到已有内容之后。如果该文件不存在,创建新文件进行写入
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

语法

对象.write('内容') 
# 1. 打开文件
f = open('test.txt', 'w')
# 2.文件写入
f.write('hello world')
# 3. 关闭文件
f.close()

注意:

  1. w 和 a 模式:如果文件不存在则创建该文件;如果文件存在, w 模式先清空再写入, a 模式直接末尾追加。
  2. r 模式:如果文件不存在则报错。

文件对象.read(num)

num表示要从文件中读取的数据长度(单位是字节),如果没有传⼊入num,那么就表示读取文件中所有的数据。

readlines()

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

f = open('test.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 关闭文件
f.close()

readline()

readline()一次读取一行内容

f = open('test.txt')
#第一行:hello world
content = f.readline()
print(f'第一行:{content}')

#第二行:abcdefg
content = f.readline()
print(f'第二行:{content}')

# 关闭文件
f.close()

seek()

作用:用来移动文件指针

语法

文件对象.seek(偏移量, 起始位置)
起始位置:
0:文件开头
1:当前位置
2:文件结尾

文件备份

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)

步骤:

  1. 接收用户输入的文件名

  2. 规划备份文件名

  3. 备份文件写入数据

  4. 接收用户输入目标文件名

old_name = input('请输入您要备份的文件名:') 
  1. 规划备份文件名
    2.1 提取目标文件后缀
    2.2 组织备份的文件名,xx[备份]后缀

    # 2.1 提取文件后缀点的下标
    index = old_name.rfind('.')
    # print(index) # 后缀中.的下标
    # print(old_name[:index]) # 源文件名(无后缀)
    # 2.2 组织新文件名 旧文件名 + [备份] + 后缀
    new_name = old_name[:index] + '[备份]' + old_name[index:]
    # 打印新文件名(带后缀)
      print(new_name)
    
    1. 备份文件写入数据
      3.1 打开源文件和备份文件
      3.2 将源文件数据写入备份文件
      3.3 关闭文件
# 3.1 打开文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 将源文件数据写入备份文件
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
        new_f.write(con)
# 3.3 关闭文件
old_f.close()
new_f.close()

文件和文件夹的操作

在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:

  1. 导入os模块

    import os
    
  2. 使用 os 模块相关功能

    os.函数名()
    

    文件重命名

    os.rename(目标文件名, 新文件名) 
    

    删除文件

    os.remove(目标文件名) 
    

    创建文件夹

    os.mkdir(文件夹名字) 
    

    删除文件夹

    os.rmdir(文件夹名字) 
    

    获取当前目录

    os.getcwd() 
    

    改变默认目录

    os.chdir(目录)
    

    获取目录列表

    os.listdir(目录)
    

应用案例

需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串。
步骤

  1. 设置添加删除字符串的的标识
  2. 获取指定目录的所有文件
  3. 将原有文件名添加/删除指定字符串,构造新名字
  4. os.rename()重命名
mport os
# 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符
flag = 1
# 获取指定目录
dir_name = './'
# 获取指定目录的⽂文件列列表
file_list = os.listdir(dir_name)
# print(file_list)
# 遍历文件列表内的文件
for name in file_list:
# 添加指定字符
if flag == 1:
new_name = 'Python-' + name
# 删除指定字符
elif flag == 2:
num = len('Python-')
new_name = name[num:]
# 打印新文件名,测试程序正确性
print(new_name)
# 重命名
os.rename(dir_name+name, dir_name+new_name)

二十二、面向对象基础

面向对象理解

面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想

例如:洗衣服

思考:几种途径可以完成洗衣服?

答:

手洗和机洗
手洗:找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗N次 - 拧干 - 晾晒
机洗:打开洗衣机 - 放衣服 - 加洗衣粉 - 按下开始按钮 - 晾晒

思考:对比两种洗衣服途径,同学们发现了什么?

答:机洗更简单

思考:机洗,只需要找到一台洗衣机,加入简单操作就可以完成洗衣服的工作,而不需要关心洗衣机内部发生了什么事情

总结:面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事

类和对象

思考:洗衣机洗衣服描述过程中,洗衣机其实就是一个事物,即对象,洗衣机对象哪来的呢?
答:洗衣机是由工厂工人制作出来。
思考:工厂工人怎么制作出的洗衣机?
答:工人根据设计师设计的功能图纸制作洗衣机。
总结:图纸 → 洗衣机 → 洗衣服。
在面向对象编程过程中,有两个重要组成部分:类和对象。
类和对象的关系:用类去创建一个对象。

理解类和对象

类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物。

  • 特征即是属性

  • 行为即是方法

    类比如是制造洗衣机时要用到的图纸,也就是说类是用来创建对象。

对象

对象是类创建出来的真实存在的事物,例如:洗衣机。

开发中,先有类,再有对象。

面向对象实现方法

定义类

语法

class 类名():
    代码
    ......

类名要满足标识符命名规则,同时遵循大驼峰命名习惯

class Washer():
    def wash(self):
        print('我会洗衣服')

不由任意内置类型派生出的类,称之为经典类

class 类名:
    代码
    ......
创建对象

语法

对象名 = 类名()
# 创建对象
haier1 = Washer()
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier对象调用实例方法
haier1.wash()

注意:创建对象的过程也叫实例化对象

self

self指的是调用该函数的对象

# 1. 定义类
class Washer():
    def wash(self):
        print('我会洗衣服')
        # <__main__.Washer object at 0x0000024BA2B34240>
print(self)
# 2. 创建对象
haier1 = Washer()
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier1对象调用实例方法
haier1.wash()

haier2 = Washer()
# <__main__.Washer object at 0x0000022005857EF0>
print(haier2)

注意:打印对象和self得到的结果是一致的,都是当前对象的内存中存储地址。

添加和获取对象属性

属性即是特征,比如:洗衣机的宽度、高度、重量…
对象属性既可以在类外面添加和获取,也能在类里面添加和获取

类外面添加对象属性

语法

对象名.属性名 =

体验

haier1.width = 500
haier1.height = 800

类外面获取对象属性

语法

对象名.属性名

体验

print(f'haier1洗衣机的宽度是{haier1.width}')
print(f'haier1洗衣机的高度是{haier1.height}')

类里面获取对象属性

语法

self.属性名
# 定义类
class Washer():
    def print_info(self):
        # 类里面获取实例属性
        print(f'haier1洗衣机的宽度是{self.width}')
        print(f'haier1洗衣机的高度是{self.height}')
# 创建对象
haier1 = Washer()
# 添加实例属性
haier1.width = 500
haier1.height = 800
haier1.print_info()

魔法方法

在Python中, __ xx__() 的函数叫做魔法方法,指的是具有特殊功能的函数。

__ init __()

作用:初始化对象

class Washer():
    # 定义初始化功能的函数
    def __init__(self):
        # 添加实例属性
        self.width = 500
        self.height = 800
	def print_info(self):
    # 类里面调用实例属性
    	print(f'洗衣机的宽度是{self.width}, 高度是{self.height}')
haier1 = Washer()
haier1.print_info()

注意:
_ init _ () 方法,在创建一个对象时默认被调用,不需要手动调用
_init _(self) 中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去

带参数的__init__()

思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?

答:传参数。

class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def print_info(self):
        print(f'洗衣机的宽度是{self.width}')
        print(f'洗衣机的高度是{self.height}')
haier1 = Washer(10, 20)
haier1.print_info()
haier2 = Washer(30, 40)
haier2.print_info()

__ str __()

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了 str 方法,那么就会打印从在这个方法中 return 的数据

class Washer():
	def __init__(self, width, height):
		self.width = width
		self.height = height
	def __str__(self):
		return '这是海尔洗衣机的说明书'
haier1 = Washer(10, 20)
# 这是海尔洗衣机的说明书
print(haier1)

_ del _()

当删除对象时,python解释器器也会默认调用 del() 方法。

class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def __del__(self):
        print(f'{self}对象已经被删除')
haier1 = Washer(10, 20)
# <__main__.Washer object at 0x0000026118223278>对象已经被删除
del haier1

转载:https://blog.csdn.net/bnnpyhk/article/details/115471586
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场