Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(二):面向对象—这是一封浪漫的情书(2)(九)

简介: 玩转Python语法(二):面向对象

5.4 文件对象常用的方法

方法名 说明
read([size]) 从文件中读取 size 个字节或字符的内容返回。若省略 [size],则读取到文件末尾,即一次读取文件所有内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入到列表返回
write(str) 将字符串 str 内容写入文件
writelines(s_list) 将字符串列表 s_list 写入文本文件,不添加换行符

seek(offset[, whence])

把文件指针移动到新的位置,offset 表示相对于 whence 的位置:offset:为正往结束方向移动,为负往开始方向移动;whence 不同的值代表不同含义:0:从文件头开始计算(默认值);1:从当前位置开始计算;2:从文件尾开始计算
tell() 返回文件指针的当前位置
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源

下面的代码请读者自己于本地运行输出结果:

file = open('a.txt', 'r', encoding='utf-8')
print(file.read())
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.read(3))
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.readline())
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.readlines())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 23:40
# 欢迎大家关注AIoT相关博客~
file = open('c.txt', 'w', encoding='utf-8')
file.write('hello 辰chen')
list = ['Python', 'C', 'C++', 'Java', 'go']
file.writelines(list)
file.close()

运行结束后,c.txt 的内容为:

hello 辰chenPythonCC++Javago
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 23:51
# 欢迎大家关注AIoT相关博客~
file = open('a.txt', 'r', encoding='utf-8')
file.seek(3) # 注意,如果采用utf-8,因为中文占3个字节,故如果你的文件内容是汉字,需为3的倍数
# 上一行代码其实就是跳过第一个汉字,从第二个汉字开始
print(file.read())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:14
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'r', encoding='utf-8')
file.seek(3)
print(file.read())
print(file.tell())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:21
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'w', encoding='utf-8')
file.write('hello')
file.flush()
file.write(' world')
# 程序不报错,flush操作后仍能继续写入内容
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:21
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'w', encoding='utf-8')
file.write('hello')
file.close()
file.write(' world')
# 程序报错,close操作后不能继续写入内容
file.flush()

5.5 with语句(上下文管理器)

🚩with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的

我们直接上代码:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
with open('a.txt','r', encoding='utf-8') as file:
    print(file.read())

image.png

可以看出,在使用了 with 语句之后,我们可以不用手写 close,会自动关闭文件资源。

with 语句的使用语法:

with open() as 文件名
  语句体
当然也有:
with 类方法 as 对象
一个类对象,实现了\_\_enter\_\_(),\_\_exit\_\_()这两个特殊方法
称这个类对象遵守上下文管理协议,而这个类的实例对象被称为上下文管理器
我们把 with 语句之后的,as语句之前的:open(), 类方法 被称为上下文表达式,结果为上下文管理器

下面我们用一个类对象去介绍:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
'''
MyContentMgr实现了特殊方法__enter__(),__exit__()称为该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
'''
class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行了')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行了')
    def show(self):
        print('show方法被调用执行了')
with  MyContentMgr() as file:    #相当于file=MyContentMgr()
    file.show()

image.png

我们在最开头说过,无论什么原因跳出 with 块,都能确保文件正常的关闭,即不论发生什么,我们都会执行__enter__(),__exit__(),我们来给上述代码搞点破坏,看看能不能还执行这两个特殊方法:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
'''
MyContentMgr实现了特殊方法__enter__(),__exit__()称为该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
'''
class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行了')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行了')
    # 在 show() 中加入 1 / 0
    def show(self):
        print('show方法被调用执行了', 1 / 0)
with  MyContentMgr() as file:    #相当于file=MyContentMgr()
    file.show()

image.png

可以看到,虽然抛出异常,但是我们的 enter方法和exit方法还是执行了。

我们在后续涉及到文件处理的时候,要尽量去使用 with语句。


5.6 目录操作

1.os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。

2.os模块与os.path模块用于对目录或文件进行操作


5.6.1 os模块

🚩os模块操作目录相关函数


函数 说明
getcwd() 返回当前的工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path[,mode]) 创建目录
makedirs(path1/path2...[,mode]) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2......) 删除多级目录
chdir(path) 将path设置为当前工作目录

这些函数如果你学过 linux,那么你会觉得很熟悉,其实也没什么区别,只不过是用 Python 去使用了一些操作指令,大家可以自行在 PyCharm 中调用这些函数,这里不再赘述。

执行操作系统的内容:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:17
# 欢迎大家关注AIoT相关博客~
# os模块与操作系统相关的一个模块
import os
os.system('notepad.exe') # 打开记事本
os.system('calc.exe')   # 打开计算器
# 直接调用可执行文件
os.startfile('D:\\QQ\\Bin\\QQScLauncher.exe')
# 第11行代码为打开QQ,需要找到你的QQ安装位置才可以打开,注意转义字符需要 \\

5.6.2 os.path模块

🚩os.path模块操作目录相关函数

函数 说明
abspath(path) 用于获取文件或目录的绝对路径
exists(path) 用于判断文件或目录是否存在,如果存在返回 True,否则返回False
join(path, name) 将目录与目录或者文件名拼接起来
splitext() 分离文件名和扩展名
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdit(path) 用哦关于判断是否为路径

函数结果演示:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:53
# 欢迎大家关注AIoT相关博客~
import os.path
print(os.path.abspath('OsPath.py'))
print(os.path.exists('OsPath.py'),os.path.exists('666.py'))
print(os.path.join('E:\\pythonProject', 'OsPath.py'))
print(os.path.split('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.splitext('OsPath.py.py'))
print(os.path.basename('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.dirname('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.isdir('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))

image.png

列出指定目录下的所有 py 文件:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:57
# 欢迎大家关注AIoT相关博客~
import  os
path=os.getcwd()
lst=os.listdir(path)
for filename in lst:
    if filename.endswith('.py'):
        print(filename)

walk() 方法:递归遍历所有的文件:可以把指定目录下的子目录文件也一一列举出来。

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 11:05
# 欢迎大家关注AIoT相关博客~
import os
path = os.getcwd()
lst_files = os.walk(path)
for dirpath, dirname, filename in lst_files:
    '''
    print(dirpath)
    print(dirname)
    print(filename)
    print('----------------------------------')
    '''
    for dir in dirname:
        print(os.path.join(dirpath, dir))
    for file in filename:
        print(os.path.join(dirpath, file))
    print('----------------------------------')


目录
相关文章
|
11月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
249 7
|
7月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
7月前
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
126 2
|
11月前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
435 61
|
9月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
293 13
|
10月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
11月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
216 1
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。

推荐镜像

更多